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

Linux-mv-Datei mit langem Namen

Lösung 1:

für eine einzelne Datei versuchen

mv dir1/dir2/dir3/file.{txt,txt.old}

wo der X{a,b} Konstrukt zu Xa Xb erweitern , können Sie mit

eine Vorschau anzeigen
echo dir1/dir2/dir3/file.{txt,txt.old}

um zu sehen, ob es Ihren Anforderungen entspricht.

Hinweis:

  1. das für mehrere Dateien

    mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
    

ist unwahrscheinlich zu erweitern, was Sie wollen. (Dies wird zu einer Mischung aus file.txt file1.txt.old file2.txt ...)

erweitert
  1. {txt,txt.old} kann auf {,.old} gekürzt werden gemäß Kommentar

  2. bei eindeutigen Verzeichnisnamen kann Platzhalter verwendet werden.

    mv *1/*2/d*/*.{,old}
    

Verwenden Sie für mehrere Dateien rename

rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt 

lass -n fallen um eine effektive Umbenennung zu haben.

Lösung 2:

Der Befehl rename benennt alle übereinstimmenden Dateien um. Sein Hauptzweck besteht darin, mehrere Dateien umzubenennen, aber wenn der Perl-Ausdruck nur mit einer Datei übereinstimmt, wird nur diese einzelne Datei umbenannt. Für Details und Distributions-spezifische Syntax lesen Sie bitte die Manpage:man rename .

Verwendungsbeispiel:"/path/file.txt" in "/path/file.txt.old" umbenennen:

rename 's/file.txt/file.txt.old/g' /path/file.txt

Kürzere Schreibweise (dank shalomb):

rename 's/$/.old/' /path/file.txt
rename '$_.=".old"' /path/file.txt

Verwenden Sie für einen Probelauf rename -n .

Weitere Beispiele und Details finden Sie unter https://thepcspy.com/read/bulk-rename-files-in-ubuntu/

Lösung 3:

Ich mag die Lösung von @archemar, die {}-Erweiterung zu verwenden, weil Sie sie verwenden können, wenn Sie Ihre Befehlszeile bereits gestartet haben. Hier sind einige andere Möglichkeiten der Vollständigkeit halber:

F="dir1/dir2/dir3/file.txt" ; mv "$F" "$F.old"

(Anführungszeichen sind nur notwendig, wenn Sie Leerzeichen oder andere Wörter trennende Zeichen im Namen haben)

mymv() {
    mv "$1/$2" "$1/$3"
}

mymv dir1/dir2/dir3 file.txt file.txt.old
mymv dir5/dir6/dir7 file.txt file.txt.old

Hinweise:

  • Dies ist Bash-Syntax, Sie verwenden möglicherweise eine andere Shell
  • mymv kann jede vernünftige Zeichenkette sein, ich habe mymv für "my move" verwendet.
  • Die Funktionsdefinition kann in Ihr .bash_profile eingefügt werden

Noch einer:

cd dir1/dir2/dir3 ; mv file.txt file.txt.old ; cd -

aber

(cd dir1/dir2/dir3/ && exec mv file.txt file.txt.old)

(von @Adam und @CharlesDuffy) ist wohl besser, falls die CD fehlschlägt.

Lösung 4:

Für einen einmaligen Fall, wenn ich mein aktuelles Verzeichnis nicht ändern möchte, kann ich einfach eine Sub-Shell verwenden:

(cd dir1/dir2/dir3/ && mv file.txt file.txt.old)

Weil Sie cd innerhalb der Sub-Shell haben Sie Ihr Verzeichnis in Ihrer eigentlichen Shell nicht geändert

Lösung 5:

Wenn Sie das Unterverzeichnis eingeben möchten, um den mv zu kürzen Befehl ausführen, aber danach zum aktuellen Verzeichnis zurückkehren möchten, gibt es zwei Möglichkeiten, dies zu tun. Eine besteht darin, cd zu setzen und mv in einer Subshell (wie bereits vorgeschlagen).

Die andere ist die Verwendung von pushd und popd Verzeichnisse wechseln:

pushd dir1/dir2/dir3/; mv file.txt file.txt.old; popd

Diepushd Befehl ist wie cd , außer dass es zuerst den Namen des aktuellen Verzeichnisses auf einen Stapel legt. popd entfernt den obersten Namen aus dem Stack und wechselt in dieses Verzeichnis.


Linux
  1. Benennen Sie eine Datei im Linux-Terminal um

  2. Sortierbefehl in Linux mit Beispielen

  3. Wie schreibe ich eine Datei mit C in Linux?

  4. Wie sehe ich du in GB anstelle von MB in Linux?

  5. Templating mit Linux in einem Shell-Skript?

Wie man mit Hardlinks und Softlinks unter Linux arbeitet

Verwendung des Linux-mv-Befehls mit Beispielen

Sichern Sie Linux mit der Sudoers-Datei

Linux-Mount-Befehl mit Beispielen

gawk Linux-Befehl mit Beispielen

Linux-make-Befehl mit Beispielen