Necesito mover archivos de una carpeta a una subcarpeta y este es un proceso que se puede ejecutar más de una vez, por lo que es posible que la subcarpeta no esté vacía.
Digamos que la estructura es la siguiente:
renatospaka@dell-w10home:~/devlpm$ ls -la
total 24
drwxr-xr-x 4 renatospaka renatospaka 4096 Sep 8 12:36 .
drwxr-xr-x 10 renatospaka renatospaka 4096 Sep 8 12:34 ..
drwxr-xr-x 2 renatospaka renatospaka 4096 Sep 8 12:36 api
-rw-r--r-- 1 renatospaka renatospaka 10 Sep 8 12:36 file1.txt
-rw-r--r-- 1 renatospaka renatospaka 10 Sep 8 12:36 file2.txt
drwxr-xr-x 2 renatospaka renatospaka 4096 Sep 8 12:34 new
Hay este excelentepreguntadel cual extraje el siguiente comando: ls | grep -v new | xargs mv -t new
. Realmente funciona y mueve el contenido alnuevocarpeta. Sin embargo, a partir de la segunda ejecución, aparece un error porque la carpeta de destino no está vacía y el proceso finaliza.
¿Cómo arreglar este problema? Probé algunas combinaciones de banderas xargs
pero todas fallaron...
Respuesta1
mv
Se queja porque no recibe ningún argumento xargs
. Agregue -r
para evitar xargs
que se ejecute si la entrada está vacía:
-r, --no-run-if-empty
If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no in‐
put. This option is a GNU extension.
Además, puedes controlar mv
el comportamiento cuando el destino existe:
Ver man mv
:
-f, --force
do not prompt before overwriting
-i, --interactive
prompt before overwrite
-n, --no-clobber
do not overwrite an existing file
Entonces:
... | xargs -r mv -f -t new
Sin embargo, su comando tiene serios problemas cuando hay nuevas líneas o incluso espacios en sus archivos. En general,no analizar la salida dels
.