Cómo mover todos los archivos a una subcarpeta

Cómo mover todos los archivos a una subcarpeta

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 xargspero todas fallaron...

Respuesta1

mvSe queja porque no recibe ningún argumento xargs. Agregue -rpara evitar xargsque 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 mvel 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.

información relacionada