Datei (Präfix) mit vollständigem Pfad umbenennen?

Datei (Präfix) mit vollständigem Pfad umbenennen?

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:

  1. nichtls analysieren;verlassen Sie sich stattdessenauf der Schale

  2. da sich die Dateien in einem Unterverzeichnis befinden, müssen Sie entweder cdzuerst dorthin gehen und die Schleife ausführen oder basenameund verwenden dirname, 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

verwandte Informationen