Переместить файл командной строки с длинным путем к каталогу без повторения пути к каталогу

Есть ли способ выполнить команду mv без ввода полного пути во втором аргументе?

Пример:

mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz

16
задан 27 March 2012 в 22:11

5 ответов

Вы можете использовать расширение скобки bash. Это:

mv my/file/that/has/a/really/long/path/foo.{bar,baz}

расширится на:

mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz

, а затем mv запускается с этими двумя аргументами. См. http://wiki.bash-hackers.org/syntax/expansion/brace для получения дополнительной информации о расширении фигурных скобок.

0
ответ дан 27 March 2012 в 22:11

Вы можете использовать псевдоним для короткого имени каталога:

alias src='/directory/name/of/source'
alias dst='/directory/name/of/destination'
mv src dst
0
ответ дан 27 March 2012 в 22:11

Вы можете попробовать:

pushd .
cd /really/long/directory/name/
mv whatever.1 whatever.2
popd
0
ответ дан 27 March 2012 в 22:11

С переменной

  1. Сохранить каталог в переменной: `DIR=./really/long/path/
  2. использовать move: mv "$DIR"foo.bar "$DIR"foo.bz

В одной строке: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz


Изменение каталога

  1. Вы также можете cd перейти в каталог, в котором хотите работать: cd ./really/long/path
  2. , а затем изменить имя файла: mv foo.bar foo.bz

В одну строку: cd ./really/long/path && mv foo.bar foo.bz

0
ответ дан 27 March 2012 в 22:11

В качестве альтернативы расширению скобок вы можете использовать функции расширения истории оболочки bash:

  • ! представляет расширение истории
  • # указатель события, обозначающий текущую команду
  • $ слово-указатель, относящееся к последнему аргументу

Вы можете выполнять подстановки в расширении, используя sed-подобный s/pattern/replacement синтаксис, например

somecommand path/to/foo.bar !#$:s/.bar/.baz

Пример.

$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'

Если вы хотите конкретно указать путь (например, к mv файлу с совершенно другим именем, которое нелегко получить подстановкой), вы можете использовать модификатор h:

$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'

Для других опций, включая readline комбинации клавиш для возврата последнего аргумента, см. Как повторить набранный в настоящее время параметр в консоли bash?

0
ответ дан 27 March 2012 в 22:11

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

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