Wie benenne ich eine Datei in einem Ordner mit einem Shell-Befehl um?


8

Ich habe eine Datei bei some/long/path/to/file/myfiel.txt.

Ich möchte es umbenennen in some/long/path/to/file/myfile.txt.

Momentan mache ich es so mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, aber das zweimalige Eingeben des Pfades ist nicht besonders effektiv (selbst bei Tab-Vervollständigung).

Wie kann ich das schneller machen? (Ich denke, ich kann eine Funktion schreiben, um nur das Dateinamensegment zu ändern, aber das ist Plan B).

Antworten:


11

Um dies in einem einzigen Befehl zu tun, können Sie einfach Folgendes tun:

mv some/long/path/to/file/{myfiel.txt,myfile.txt}

Dies ist ein Beispiel für den vollständigen Dateinamen, da es sich um einen Tippfehler handelt, den Sie wie folgt ausführen können:

mv some/long/path/to/file/myfi{el,le}.txt

Beide werden zum vollständigen Befehl erweitert. Diese werden als Klammererweiterungen bezeichnet . Sie werden von zsh unterstützt .


Oh mein Gott, das eröffnet so viele Möglichkeiten. Vielen Dank!
Leonid Shevtsov

5

Hier sind mehrere Optionen:

Wechseln Sie in das Verzeichnis:

cd /home/long/path
mv file1 file2
cd -

Ändern Sie Verzeichnisse mithilfe des Verzeichnisstapels:

pushd /some/long/path
mv file1 file2
popd

Wechseln Sie mit einer Subshell in das Verzeichnis:

( 
  cd /some/long/path
  mv file1 file2
)   # no need to change back

Verwenden Sie die Klammererweiterung:

mv /some/long/path/{file1,file2}

Verwenden Sie eine Variable:

D=/some/long/path
mv "$D/file1" "$D/file2"

Beachten Sie, dass der letzte Ansatz unterbrochen wird, wenn der Pfad ein Leerzeichen enthält.
Slhck

@slhck ALLE Ansätze brechen ab, wenn Sie Leerzeichen haben.
Tyler

1
Nein, wenn Sie sie richtig eingeben, werden sie nicht. Nur die Variable, wenn sie erweitert wird, sieht aus wie mehrere Argumente für mv
slhck

@slhck los geht's.
Tyler

3

Wechseln Sie in das Verzeichnis, verschieben Sie die Datei und kehren Sie zum vorherigen Verzeichnis zurück. wie so:

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -

1

Wenn ich die Subshell-Methode verwende, würde ich dies eher in einer Zeile tun

(cd /some/long/path ; mv myfiel myfile )
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.