In einigen Verzeichnissen habe ich viele Dateien mit dem Namen
...
DSC_0002
DSC_0005
DSC_0010
...
Ich möchte Dateien umbenennen/neu auflisten
DATEI_0001
DATEI_0002
...
Vielleicht muss ich die Nummerierung NICHT bei 0001 beginnen
Antwort1
Angenommen, das Verzeichnis, das diese Dateien enthält, ist /Pfad/zum/Verzeichnis. Dann
sieht das benötigte Skript folgendermaßen aus:
start=1
cd "/path/to/dir"
for file in ./*;do
mv "${file}" "FILE_$(printf "%04d" $start)"
start=$((start+1))
done
Antwort2
versuchen
ls | awk '{printf "mv %s FILE_%04d\n",$0,NR ;} ' | bash
- Stellen Sie sicher, dass keine Dateien lustige Namen haben.
remove |
Bash-Teil, um eine Vorschau zu erhalten.- verwenden
NR+666
, um bei 667 zu beginnen. - verwenden Sie
%02d
oder%06d
, um die Zahl 01 oder 000001 zu generieren.
Antwort3
Sie können beispielsweise Folgendes tun:
#!/bin/bash
Counter=${1:-1} # It will take the starting number as 1st parameter
WhichDir=${2:-.} # It will take the path as 2nd parameter
# We try to see if the directory exists and if you can go there
(cd "$WhichDir" 2>/dev/null) || { echo "# $WhichDir NOT FOUND " ; exit 1; }
cd "$WhichDir" # it exists and you can go there
shopt -s nullglob # see notes
for f in DSC_* # for all the files in this dir
do
New_Name=$(printf "FILE_%04d.jpg" $Counter)
# change .jpg in what you need
Counter=$(($Counter +1)) # increase the counter
echo "mv -i \"$f\" \"$New_Name\" " # the -i will prompt before overwrite
# mv -i "$f" "$New_Name" # uncomment this line to make it works
exit 0
Anmerkungen
- Wenn duspielenmit
mv
kann gefährlich sein. Es kann vorhandene Dateien überschreiben. Es kann Verzeichnisse verschieben/umbenennen. Daher ist es besser, vor der Ausführung eines Skripts eine visuelle Überprüfung durchzuführen. Anschließend können Sie die Ausgabe in eine Shell weiterleiten:
z. B../Myscript.sh
ist alles in Ordnung? Wenn ja, können Sie schreiben./Myscript.sh | /bin/bash
(oder Sie können es ändern, indem Sie das „Echo“ oder den Kommentar in der folgenden Zeile löschen). - Es ist besser zu schreiben
mv -i
: es wird vor dem Überschreiben gefragt DSC_*
Wenn sich im aktuellen Verzeichnis keine Dateien befinden,shopt -s nullglob
werden Erweiterungsfehler vermieden.Allgemeines ist nicht sicher, dieAusgabe von
ls
auch wenn es in Ihrem Fall kein wirkliches Problem sein sollte, da Sie für die Dateien den Standardnamen von der Kamera haben solltenDSC_nnnn.jpg
.- Normalerweise gibt es eine Erweiterung (vielleicht
.jpg
oder.tif
oder.raw
) ... ändern oder löschen Sie sie im Skript, um sie Ihren Anforderungen anzupassen.