Portál AbcLinuxu, 7. prosince 2025 01:00
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.