Як перейменувати файл всередині папки за допомогою команди shell?


8

У мене є файл у some/long/path/to/file/myfiel.txt.

Я хочу перейменувати його на some/long/path/to/file/myfile.txt.

В даний час я це роблю mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, але введення шляху двічі не є надзвичайно ефективним (навіть із заповненням вкладки).

Як я можу це зробити швидше? (Я думаю, що я можу написати функцію змінити лише сегмент імені файлу, але це план B).

Відповіді:


11

Для цього в одній команді ви можете просто зробити це:

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

Що є прикладом повного імені файлу, враховуючи, що це помилка друку, ви можете зробити щось на кшталт:

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

Обидва розширяться до повної команди, це називається розширенням дужок . Їх підтримує zsh .


О, це відкриває стільки можливостей. Дякую!
Леонід Шевцов

5

Ось кілька варіантів:

Змінення до каталогу:

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

Зміна каталогів за допомогою стека каталогу:

pushd /some/long/path
mv file1 file2
popd

Перейдіть до каталогу за допомогою допоміжної оболонки:

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

Використовуйте розширення дужок:

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

Використовуйте змінну:

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

Остерігайтеся, що останній підхід порушується, коли на шляху є пробіл, краще процитуйте його.
slhck

@slhck ВСІ підходи ламаються, якщо у вас є пробіли.
tylerl

1
Ні, якщо ви правильно введете їх, вони не будуть. Тільки змінна при розширенні буде схожа на кілька аргументів на mv
slhck

@slhck там ви йдете.
tylerl

3

Перехід до каталогу, переміщення файлу та повернення до попереднього каталогу; так:

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

1

Коли я використовую метод допоміжної оболонки, я б схильний робити це в одному рядку так

(cd /some/long/path ; mv myfiel myfile )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.