Ich habe ein Verzeichnis mit Dateien, in denen einige dann mit einem Unterstrich enden.
Ich möchte jede Datei testen, um festzustellen, ob sie mit einem Unterstrich endet, und dann den Unterstrich entfernen.
Ich verwende derzeit den folgenden Code:
for file in *;do
echo $file;
if [[ "${file:$length:1}" == "_" ]];then
mv $file $(echo $file | sed "s/.$//g");
fi
done
Es scheint jedoch nicht, die Dateien mit Unterstrich umzubenennen. Wenn ich zum Beispiel eine Datei mit dem Namen all_indoors_
habe, erwarte ich, dass sie mir all_indoors
gibt.
4 Antworten
Sie können verwenden, welche rekursiv sein wird:
while read f; do
mv "$f" "${f:0:-1}"; # Remove last character from $f
done < <(find . -type f -name '*_')
Sie können die integrierte String-Ersetzung verwenden:
for file in *_; do
mv "$file" "${file%_}"
done
Verwenden Sie einfach einen regulären Ausdruck, um die Zeichenfolge zu überprüfen:
for file in *
do
[[ $file =~ "_$" ]] && echo mv "$file" "${file%%_}"
done
Wenn Sie sicher sind, dass es wie beabsichtigt funktioniert, entfernen Sie das echo
, damit der Befehl mv
ausgeführt wird!
Es kann sogar sauberer sein, *_
zu verwenden, sodass for
nur die Dateien mit einem Namen durchläuft, der mit _
endet, als hek2mgl schlägt in Kommentaren vor.
for file in *_
do
echo mv "$file" "${file%%_}"
done
Obwohl dies kein reiner bash
Ansatz ist, können Sie rename.ul
verwenden (geschrieben von Larry Wall, der Person hinter perl
). Das Umbenennen ist nicht Teil der Standard-Linux-Umgebung, sondern Teil von util-linux
.
Sie verwenden Umbenennen mit:
rename perlexpr files
(einige Flags weggelassen).
Sie könnten also verwenden:
rename 's/_$//' *
Wenn Sie alle Zeichen einschließlich und nach dem Unterstrich entfernen möchten.
Wie @ hek2mgl hervorhebt, gibt es mehrere rename
Befehle (siehe hier), also testen Sie zuerst, ob Sie den richtigen ausgewählt haben.
Verwandte Fragen
Neue Fragen
bash
Bei Fragen zu Skripten, die für die Bash-Befehlsshell geschrieben wurden. Überprüfen Sie Shell-Skripte mit Fehlern / Syntaxfehlern mit dem Shellcheck-Programm (oder auf dem Web-Shellcheck-Server unter https://shellcheck.net), bevor Sie sie hier veröffentlichen. Fragen zur interaktiven Verwendung von Bash sind bei Super User eher themenbezogen als bei Stack Overflow.