![Datei (Präfix) mit vollständigem Pfad umbenennen?](https://rvso.com/image/89180/Datei%20(Pr%C3%A4fix)%20mit%20vollst%C3%A4ndigem%20Pfad%20umbenennen%3F.png)
Ich würde meinen Dateien ( .dat
) folgendes Präfix voranstellen:
CLY_BIZ_COM_PERD.dat -> 20160622CLY_BIZ_COM_PERD.dat
Ich habe Folgendes versucht:
key=`date "+%Y%m%d"`
for i in $(ls /Path/*.dat); do mv ${i} "${key}${i}" ;done
Aber dieser BefehlSuffixmeine Dateien und kein Präfix. Wie kann ich das machen?
Antwort1
Zwei Änderungen an Ihrem aktuellen Skript:
nichtls analysieren;verlassen Sie sich stattdessenauf der Schale
da sich die Dateien in einem Unterverzeichnis befinden, müssen Sie entweder
cd
zuerst dorthin gehen und die Schleife ausführen oderbasename
und verwendendirname
, um die Verzeichnis- und Dateinamenteile der Datei herauszuziehen, bevor Sie das Präfix hinzufügen.
(Hinweis: Ich habe auch Ihren „/Path“ in „./Path“ geändert, da ich kein /Path-Verzeichnis auf Stammebene erstellen wollte. Es gelten jedoch dieselben Grundsätze.
So richten Sie einige Beispieldateien ein:
mkdir Path && cd Path
touch CLY_BIZ_COM_PERD.dat jeff.dat a.dat c\ d.dat
cd ..
Hier ist ein Probelauf:
for f in ./Path/*.dat
do
printf "mv '%s' '%s'\n" "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
Ausgabe des Probelaufs:
mv './Path/a.dat' './Path/20160622a.dat'
mv './Path/c d.dat' './Path/20160622c d.dat'
mv './Path/CLY_BIZ_COM_PERD.dat' './Path/20160622CLY_BIZ_COM_PERD.dat'
mv './Path/jeff.dat' './Path/20160622jeff.dat'
Wenn Sie zufrieden sind, machen Sie es richtig:
for f in ./Path/*.dat
do
mv "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
... und das Ergebnis:
$ ls -1 Path
20160622a.dat
20160622c d.dat
20160622CLY_BIZ_COM_PERD.dat
20160622jeff.dat