Portál AbcLinuxu, 13. května 2024 13:33
neco.txt
na neco_ddmmrr.txt
?
Co myslíte tím automaticky? (Pokud chcete aktuální datum, tak je tu příkaz date
, na přejmenování pak mv
).
ddmmrr
má být datum poslední změny souboru):
f="neco.txt" mv $f `ls -l --full-time $f | awk '{ print gensub("(.*)\\.[^.]+", "\\1", 1, $9) "_" substr($6,9,2) substr($6,6,2) substr($6,3,2) "." gensub(".*\\.([^.]+)", "\\1", 1, $9) }'`Ale řekl bych, že
awk
mi tam bere jeden prázdný řádek navíc, takže to ještě bude chtít doladit…
mv *.txt neco_$(date +%d%m%Y).txt
, ale to neni presne to, co potrebuju. To neco
je promenlivy, tak potrebuju, aby to nejak bral z puvodniho nazvu souboru...
d=`date +%d%m%Y` for f in *.txt ; do mv $f `echo $f $d | awk 'print gensub("(.*)\\.[^.]+", "\\1", 1, $1) "_" $2 "." gensub(".*\\.([^.]+)", "\\1", 1, $1) '` done
for f in *.txt; do mv -i "$f" "${f%.txt}_$(date +%d%m%y).txt" done
neco_ddmmrr_02.txt
?
#!/bin/bash function print_new_name () { # Input: file.txt # Output: file_090308_01.txt date=$(date +%d%m%y) i=1 while :; do printf -v name "%s_%s_%02d.txt" "${1%.txt}" $date $i if [ ! -e "$name" ]; then break; fi let i=i+1 done echo "$name" } for f in *.txt; do # skip names with suffixes like _090308_01.txt if [ "${f%_[0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9].txt}" == "$f" ]; then name=$(print_new_name "$f") mv "$f" "$name" fi done
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.