Каталог изменения к цели операции пересылки

Иногда, я отредактировал некоторый файл и хочу переместить его в другую папку. (Обычно: к папке Dropbox, где я не хотел работать, чтобы не давать другим владельцам папки постоянные обновления.) Я делаю это, например, с

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

Впоследствии, я часто желаю для изменения каталога на целевой каталог моей предыдущей операции пересылки. Я поражаю стрелку вверх, удаляя финал file.pdf, оставленное содержание, удаление mv file.pdf и замена его с cd.

Существует ли более быстрый, более умный способ сделать это? Существует ли "файл перемещения, и затем измените каталог для" управления, или ярлык для последнего используемого каталога или чего-то как этот?

12
задан 2 March 2017 в 08:41

3 ответа

Если вы используете bash, то его история взаимодействия имеет только ярлык для этого. слово-указатель для последнего аргумента предыдущей команды:

!!:$
обозначает последний аргумент предыдущей команды. Это может быть сокращено до !$.

В сочетании с модификатором для удаления последнего компонента имени пути:

После необязательного обозначения слова вы можете добавить последовательность из одного или нескольких из допустимые модификаторы , каждому из которых предшествует ':'.

h
Удалите завершающий компонент имени пути, оставив только заголовок.

Итак:

$ echo /ab/c/d
/ab/c/d
$ echo !$:h
echo /ab/c
/ab/c

Этот же ярлык можно использовать и с zsh.

17
ответ дан 23 November 2019 в 03:35

Если Вы не изменяете имя файла, можно опустить его, и mv добавит его автоматически; это особенно полезно при перемещении нескольких файлов:

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/

mv *.pdf ../../../Dropbox/sharedfolder/subdirectory/

С каталогом как последний аргумент, можно использовать !!:$ или !$, как ответ muru описывает.
при использовании удара с обычными значениями по умолчанию можно использовать Высокий звук + . вместо этого.
(Это - команда readline insert-last-argument; bind -p перечислит всю Вашу текущую привязку.)

4
ответ дан 23 November 2019 в 03:35

Другой подход должен создать Вашу собственную команду, выделенную с этой целью. Это может быть сделано через функцию, которая могла быть похожей:

$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }

Где: (1) mv-special имя функции; (2) переменные $1 и $2 аргументы в функции, кто будет использоваться командами mv и cd; (3) $(echo $2-) добавляет рискованный символ в конец строки в var $2, и фиксирует поведение dirname если переменная $2 содержит только путь; (4) $(dirname $(echo $2-)) отфильтрует только путь от $2.

Согласно этому ответу функция могла быть похожей:

$ function mv-special { mv $1 $2; cd ${2%/*}; }

Где: ${2%/*} отфильтрует только путь от $2.

Чтобы быть доступной как команда, эта функция должна быть экспортирована:

$ export -f mv-special

Использование:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

или:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/

Обратите внимание на тот - для обоих вариантов - второй аргумент ($2) должны концы с именем файла или наклонной чертой (/).

Чтобы быть нашей новой постоянно доступной командой, определение функции и команды экспорта должно быть добавлено к ~/.bashrc:

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special

или:

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special

enter image description here


Пользовательская команда может быть сделана и через исполняемый файл сценария, который помещается в ~/bin или в /usr/sbin: Как я могу создать пользовательскую терминальную команду (для запущения скрипта)? Но честно говоря, со мной стояли проблема с поведением cd в этом сценарии.

-1
ответ дан 23 November 2019 в 03:35

Другие вопросы по тегам:

Похожие вопросы: