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 , но ввод пути дважды не очень эффективен (даже с завершением табуляции).

Как я могу сделать это быстрее? (Я думаю, что могу написать функцию для изменения только сегмента имени файла, но это план Б).

4 ответа4

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"
3

Перейдите в каталог, переместите файл и вернитесь в предыдущий каталог; вот так:

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

Когда я использую метод subshell, я склонен делать это в одной строке

(cd /some/long/path ; mv myfiel myfile )

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .