Есть ли способ выполнить mv
команду без ввода полного пути во втором аргументе?
Пример:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
command-line
Finbarr
источник
источник
cd
в директорию иmv
оттуда?Ответы:
Вы можете использовать расширение скобки Bash. Эта:
будет расширяться в:
а затем
mv
запускается с этими двумя аргументами. См http://wiki.bash-hackers.org/syntax/expansion/brace больше о расширении распорки.источник
В качестве альтернативы расширению скобок вы можете использовать функции расширения истории оболочки bash :
!
вводит расширение истории#
Событие целеуказатель, обозначающее текущую команду$
Слово целеуказатель со ссылкой на последний аргументВы можете выполнить подстановку расширения с использованием СЭД-подобный
s/pattern/replacement
синтаксис , например ,Ex.
Если вы хотите , чтобы путь конкретно (например,
mv
файл с совершенно другим именем, не легко получить путем замены), вы можете использоватьh
модификатор:Другие варианты, в том числе
readline
комбинации клавиш для вызова последнего аргумента, см. В разделе Как повторить набранный в данный момент параметр в консоли bash?источник
Вы можете попробовать:
источник
С переменной
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
В одну строку:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
Изменение каталога
cd
перейти в каталог, в котором вы хотите работать:cd ./really/long/path
mv foo.bar foo.bz
В одну строку:
cd ./really/long/path && mv foo.bar foo.bz
источник
&&
в этой последней строчке. В противном случае, еслиcd
не удается, тоmv
будет работать в неправильном каталоге, потенциально перезапись файла. Сcd ./really/long/path && mv foo.bar foo.baz
,mv
будет запускаться только в случаеcd
успешного изменения каталога.Вы можете использовать псевдоним команды для короткого имени каталога:
источник
alias test='/var/log' ; cd test
дает-bash: cd: test: No such file or directory
.