Ich habe eine Reihe von Dateien in einem Ordner und möchte jedes Leerzeichen in allen Dateinamen durch Unterstriche ersetzen. Wie kann ich das erreichen?
Ich habe eine Reihe von Dateien in einem Ordner und möchte jedes Leerzeichen in allen Dateinamen durch Unterstriche ersetzen. Wie kann ich das erreichen?
Antworten:
Dies sollte es tun:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
zu PATH_TO_YOUR_DIRECTORY
.
Ich bevorzuge die Verwendung des Befehls 'Umbenennen', der reguläre Ausdrücke im Perl-Stil verwendet:
rename "s/ /_/g" *
Sie können einen Trockenlauf mit dem Flag -n durchführen:
rename -n "s/ /_/g" *
rename " " "_" *
rename
In OSX nicht verfügbar.
rename
ist verfügbar.
Verwenden Sie sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Wenn Sie dies ausprobieren möchten, bevor Sie den Abzug betätigen, wechseln Sie einfach mv
zu echo mv
.
Wenn Sie bash verwenden:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
mv --help 'für weitere Informationen.
mv --help' for more information. mv: missing file argument Try
Dateiargument Versuchen Sie mv --help 'für weitere Informationen. mv: fehlendes mv --help' for more information. mv: missing file argument Try
Dateiargument Weitere Informationen finden Sie unter mv --help '.
Was ist, wenn Sie die Ersetzungsaufgabe rekursiv anwenden möchten ? Wie würdest du das machen?
Nun, ich habe die Antwort gerade selbst gefunden. Nicht die eleganteste Lösung (versucht auch, Dateien umzubenennen, die nicht der Bedingung entsprechen), aber es funktioniert. (Übrigens musste ich in meinem Fall die Dateien mit '% 20' umbenennen, nicht mit einem Unterstrich)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
Versuchen Sie etwas Ähnliches, vorausgesetzt, alle Ihre Dateien waren .txt-Dateien:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
mv --help 'für weitere Informationen.
Hier ist eine andere Lösung:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Zitieren Sie Ihre Variablen:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Entfernen Sie das "Echo", um die eigentliche Umbenennung vorzunehmen.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ': Keine solche Datei oder kein solches Verzeichnis mv: kann nicht stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
\' 1130_diningroom_table.jpg \ '': Keine solche Datei oder kein solches Verzeichnis
Der einfachste Weg, eine Zeichenfolge (in Ihrem Fall ein Leerzeichen) durch eine andere Zeichenfolge zu ersetzen, Linux
ist die Verwendung von sed
. Sie können dies wie folgt tun
sed -i 's/\s/_/g' *
Hoffe das hilft.
Ich glaube, Ihre Antwort lautet " Leerzeichen in Dateinamen durch Unterstriche ersetzen" .
Um alle Dateien mit einer .py
Erweiterung umzubenennen, verwenden Sie:
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Beispielausgabe,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py
1 - foo.jpg
und mein Ordner hatte1.jpg
schon drin.