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).

Leonid Shevtsov
quelle

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 .

Tamara Wijsman
quelle
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"
tylerl
quelle
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 -
Yedric
quelle
1

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

(cd /some/long/path ; mv myfiel myfile )
Keith Wolters
quelle