Это переместится 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 - это путь к новому каталогу, который передается по ссылке с использованием и выводится с помощью .
-v
grep
demo-app.zip
mv
mkdir
$_
echo