Digamos que tengo un archivo /templates/apple
y quiero
- ponlo en dos lugares diferentes y luego
- quitar el original
Por lo tanto, /templates/apple
se copiará a /templates/used
AND /templates/inuse
y luego me gustaría eliminar el original.
¿Es cp
la mejor manera de hacer esto, seguido de rm
? ¿O hay un mejor camino?
Quiero hacerlo todo en una línea, así que estoy pensando que se vería algo así:
cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
¿Es esta la sintaxis correcta?
¿Por qué no
cp
a la ubicación 1, luegomv
a la ubicación 2. Esto se encarga de "eliminar" el original.Y no, no es la sintaxis correcta.
|
se utiliza para "canalizar" la salida de un programa y convertirla en entrada para el siguiente programa. Lo que quieres es;
, que separa múltiples comandos.Si necesita que los comandos individuales DEBEN tener éxito antes de que se pueda iniciar el siguiente, entonces usaría
&&
en su lugar:De esa manera, si alguno de los
cp
comandos falla,rm
no se ejecutará.fuente
Tenga en cuenta que
cp A B; rm A
es exactamentemv A B
. También será más rápido, ya que no tiene que copiar los bytes (suponiendo que el destino esté en el mismo sistema de archivos), simplemente cambie el nombre del archivo. Entonces quierescp A B; mv A C
fuente
Otra opción es escribir Ctrl+V Ctrl+Jal final de cada comando.
Ejemplo (reemplazar
#
con Ctrl+V Ctrl+J):Salida:
Esto ejecutará los comandos independientemente de si los anteriores fallaron.
Igual que:
echo 1; echo 2; echo 3
Si desea detener la ejecución de comandos fallidos, agregue
&&
al final de cada línea excepto la última.Ejemplo (reemplazar
#
con Ctrl+V Ctrl+J):Salida:
En
zsh
también puede usar Alt+Entero en Esc+Enterlugar deCtrl+V Ctrl+Jfuente
Prueba esto..
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
fuente
Usar tuberías me parece extraño. De todos modos, debe usar el
and
operador lógico Bash:Si los
cp
comandos fallan,rm
no se ejecutará.O bien, puede hacer una línea de comando más elaborada usando un
for
bucle ycmp
.fuente