Это переместится foo.cв новый каталог bazс родительским каталогом bar.
mv foo.c `mkdir -p ~/bar/baz/ && echo $_`
-pОпция mkdirбудет создавать промежуточные каталоги по мере необходимости.
Без-p всех каталогов префикс пути уже должен существовать.
Все внутри обратных галочек ``выполняется, и результат возвращается в строке как часть вашей команды.
Поскольку mkdirничего не возвращает, в команду echo $_будет добавлен только вывод .
$_ссылается на последний аргумент ранее выполненной команды.
В этом случае он вернет путь к вашему новому каталогу ( ~/bar/baz/), переданныйmkdir команде.
Я распаковал архив без указания места назначения и хотел переместить все файлы, кроме
demo-app.zipмоего текущего каталога, в новый каталог с именем
demo-app.
Следующая строка делает трюк:
mv `ls -A | grep -v demo-app.zip` `mkdir -p demo-app && echo $_`
ls -Aвозвращает все имена файлов, включая скрытые файлы ( кроме неявных .и.. ).
Символ канала |используется для передачи вывода lsкоманды grep( командная строка, утилита поиска в виде простого текста ). Флаг направляет , чтобы найти и вернуть все имена файлов , исключающие .
Этот список файлов добавляется в нашу командную строку как исходные аргументы команды перемещения . Аргумент target - это путь к новому каталогу, который передается по ссылке с использованием и выводится с помощью .
-vgrepdemo-app.zip
mvmkdir$_echo