Ich möchte eine Dateierweiterung von *.txt ändern zu *.text . Ich habe versucht, den basename zu verwenden Befehl, aber ich habe Probleme beim Ändern von mehr als einer Datei.
Hier ist mein Code:
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
Ich erhalte diesen Fehler:
basename: too many arguments Try basename --help' for more information
Akzeptierte Antwort:
Direkt aus Gregs Wiki:
# Rename all *.txt to *.text
for f in *.txt; do
mv -- "$f" "${f%.txt}.text"
done
*.txt ist ein Globbing-Muster, das * verwendet als Platzhalter für eine beliebige Zeichenfolge. *.txt stimmt mit allen Dateinamen überein, die mit „.txt“ enden.
-- markiert das Ende der Optionsliste. Dadurch werden Probleme mit Dateinamen vermieden, die mit Bindestrichen beginnen.
${f%.txt} ist eine Parametererweiterung, ersetzt durch den Wert von f Variable mit .txt am Ende entfernt.
Siehe auch den Eintrag, warum Sie ls nicht parsen sollten .
Wenn Sie basename verwenden müssen , Ihre Syntax wäre:
for f in *.txt; do
mv -- "$f" "$(basename -- "$f" .txt).text"
done