Скажем, у меня есть файл, /templates/apple
и я хочу
- положить его в двух разных местах, а затем
- удалить оригинал
Итак, /templates/apple
будут скопированы в /templates/used
AND, /templates/inuse
а затем после этого я хотел бы удалить оригинал.
Это cp
лучший способ сделать это, а затем rm
? Или есть лучший способ?
Я хочу сделать все это в одну строку, поэтому я думаю, что это будет выглядеть примерно так:
cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
Это правильный синтаксис?
Почему бы не
cp
к месту 1, тоmv
в место 2. Это заботится о «удалении» оригинала.И нет, это не правильный синтаксис.
|
используется для «передачи» вывода из одной программы и превращения его во ввод для следующей программы. То, что вы хотите;
, это разделить несколько команд.Если вам требуется, чтобы отдельные команды ДОЛЖНЫ были выполнены успешно, прежде чем могут быть запущены следующие, вы должны использовать
&&
вместо этого:Таким образом, если какая-либо из
cp
команд неrm
будет выполнена , команда не будет запущена.источник
Обратите внимание, что
cp A B; rm A
это точноmv A B
. Это также будет быстрее, поскольку вам не нужно фактически копировать байты (при условии, что место назначения находится в той же файловой системе), просто переименуйте файл. Так ты хочешьcp A B; mv A C
источник
Другим вариантом является ввод Ctrl+V Ctrl+Jв конце каждой команды.
Пример (заменить
#
на Ctrl+V Ctrl+J):Вывод:
Это выполнит команды независимо от того, были ли предыдущие неудачи.
Такой же как:
echo 1; echo 2; echo 3
Если вы хотите остановить выполнение неудачных команд, добавьте
&&
в конце каждой строки, кроме последней.Пример (заменить
#
на Ctrl+V Ctrl+J):Вывод:
В
zsh
вы также можете использовать Alt+Enterили Esc+EnterвместоCtrl+V Ctrl+Jисточник
Попробуй это..
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
источник
Использование труб мне кажется странным. В любом случае вы должны использовать логический
and
оператор Bash:Если
cp
команды не пройдены, командаrm
не будет выполнена.Или вы можете сделать более сложную командную строку, используя
for
цикл иcmp
.источник