GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie ändere ich die Erweiterung mehrerer Dateien?

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

Linux
  1. So ändern Sie die Identität eines Linux-Systems

  2. So komprimieren Sie mehrere Dateien unter Linux

  3. Wie benenne ich mehrere Dateien mit Find um?

  4. Wie ändere ich die Berechtigung für eine einzelne Datei?

  5. So ändern Sie den Hostnamen unter Ubuntu

So ändern Sie die Dateiberechtigungen in Linux rekursiv

Linux-Erweiterung zum Umbenennen mehrerer Dateien

So ändern Sie das Root-Passwort unter Linux

So ändern Sie den Server-Hostnamen in Ubuntu

So ändern Sie den SSH-Port in CentOS

Wie ändere ich die Zeitzone auf Ubuntu 18.04 Server?