Другой подход - создать собственную команду, предназначенную для этой цели. Это можно сделать с помощью функции, которая может выглядеть следующим образом:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
Где: (1) mv-special - имя функции; (2) переменные $1и $2аргументы в функции, которые будут использоваться командами mvи cd; (3) $(echo $2-) добавляет символ wildcat в конец строки в 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

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