Ich habe also einen Haufen Dateien in einem Ordner, bei denen eine vorangestellte Zahl die Reihenfolge der Dateien angibt, es handelt sich aber nicht um die üblichen Zahlen 1-n, wie hier:
2-file.txt
4-file.txt
7-file.txt
12-file.txt
und ich möchte sie in einer sequenziellen Reihenfolge von 1 bis „Anzahl der Dateien“ haben, wobei die numerische Reihenfolge erhalten bleiben soll, also:
1-file.txt
2-file.txt
3-file.txt
4-file.txt
wobei 1-file.txt die vorherige 2-file.txt ist, 2-file.txt die vorherige 4-file.txt ist und so weiter
Antwort1
Dieses Skript sollte die Aufgabe für Sie erledigen. Stellen Sie sicher, dass Sie es von DEBUG auf LIVE umstellen:
#!/bin/sh
list=`ls *-file.txt | sort -n`
i=1
for f in $list
do
#DEBUG MODE
echo "mv $f $i-file.txt"
#LIVE MODE
#mv $f $i-file.txt
i=$(($i + 1))
done
Und hier ist eine Version ohne die fest codierte Erweiterung:
#!/bin/sh
if [ -z $1 ]
then
echo "
You need to pass a prefix. For example:
${0##*/} -file.txt
"
exit 1
fi
list=`ls *${1} | sort -n`
i=1
for f in $list
do
#DEBUG MODE
echo "mv $f ${i}${1}"
#LIVE MODE
#mv $f ${i}${1}
i=$(($i + 1))
done