Jak zmienić nazwę pliku w folderze za pomocą polecenia powłoki?

8

Mam plik na some/long/path/to/file/myfiel.txt.

Chcę zmienić nazwę na some/long/path/to/file/myfile.txt.

Obecnie robię to przez mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, ale dwukrotne wpisanie ścieżki nie jest zbyt skuteczne (nawet przy uzupełnieniu tabulacji).

Jak mogę to zrobić szybciej? (Myślę, że mogę napisać funkcję zmieniającą tylko segment nazwy pliku, ale to plan B).

Leonid Szewcow
źródło

Odpowiedzi:

11

Aby to zrobić za pomocą jednego polecenia, możesz po prostu to zrobić:

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

Który jest przykładem pełnej nazwy pliku, biorąc pod uwagę, że jest to literówka, możesz zrobić coś takiego:

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

Oba zostaną rozwinięte do pełnego polecenia, są to tak zwane rozszerzenia nawiasów klamrowych . Są obsługiwane przez zsh .

Tamara Wijsman
źródło
O rany, to otwiera wiele możliwości. Dzięki!
Leonid Shevtsov
5

Oto kilka opcji:

Przejdź do katalogu:

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

Zmień katalogi za pomocą stosu katalogów:

pushd /some/long/path
mv file1 file2
popd

Przejdź do katalogu za pomocą podpowłoki:

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

Użyj rozwinięcia nawiasu:

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

Użyj zmiennej:

D=/some/long/path
mv "$D/file1" "$D/file2"
tylerl
źródło
Uważaj, że ostatnie podejście się psuje, gdy ścieżka ma spację, lepiej ją zacytuj.
slhck 12.10.12
@slhck WSZYSTKIE podejścia się psują, jeśli masz spacje.
tylerl
1
Nie, jeśli wpiszesz je poprawnie, nie zrobią tego. Tylko zmienna po rozwinięciu będzie wyglądać jak wiele argumentów dla mv
slhck
@slhck proszę bardzo.
tylerl
3

Przejdź do katalogu, przenieś plik i wróć do poprzedniego katalogu; tak:

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -
Yedric
źródło
1

Kiedy używam metody podpowłoki, zwykle robię to w jednym wierszu

(cd /some/long/path ; mv myfiel myfile )
Keith Wolters
źródło