Masowa zmiana nazw plików (bash)


(koksik81) #1

Witam mam kilka katalogów ze zdjęciami a każdym średnio po 15 tyś zdjęć i teraz chciałbym za jednym zamachem za pomocą skryptu zmienić nazwy plików .

Pliki maja nazwę

obraz2.jpg.1 do obraz2.jpg.1500 i teraz chcaiłbym aby każdy plik zmienił nazwę na datę kiedy został utworzony np: 010912-04-00-34.jpg plik z 1 wrzesień 2012 godzina 4 minut 0 i sekund 34 , mam taki skrypt w bashu

#!/bin/bash

# Copy jpg files in a directory to a new name based solely on creation date

# FROM: obraz2.jpg.1 > 1500 Created on: 2012-04-18 18:51:44

# TO: 20120418_185144.jpg

for i in *.*

do

# mod_date=$(stat -c "%y" "$i"|sed 's/\..*$//')

# mod_date=$(stat -c "%y" "$i"|awk '{print $1"_"$2}'|sed 's/\..*$//')

mod_date=$(stat --format %y "$i"|awk '{print $1"_"$2}'|cut -f1 -d'.'|sed 's/[: -]//g')

 cp "$i" "$mod_date".jpg

done

tylko mam problem aby nazwa była taka jaką podałem

010912-04-00-34.jpg a nie ta którą robi skrypt 20120418_185144.jpg co należy zmienić aby było tak jak ja chcę , dodam ze skrypt znalazłem a nie sam napisałem.


(nintyfan) #2

Przede wszystkim chyba zamiast cp powinno być mv.


(roobal) #3

Z sekundami to radzę uważać, lepiej dać inny parametr, który odróżnia plik, zauważ, że skrypt wykonuje polecenia szybciej, niż w sekundę i niektóre pliki mogą zostać nadpisane, bo będą miały taką samą nazwę, co może równać się z ich stratą.

#!/bin/bash