Como mover todos os arquivos para uma subpasta

Como mover todos os arquivos para uma subpasta

Preciso mover arquivos de uma pasta para uma subpasta e este é um processo que pode ser executado mais de uma vez, portanto a subpasta não pode ficar vazia.

Digamos que a estrutura seja a seguinte:

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

Existe este excelenteperguntado qual extraí o seguinte comando: ls | grep -v new | xargs mv -t new. Realmente funciona e move o conteúdo para onovopasta. Porém, a partir da 2ª execução, surge um erro porque a pasta de destino não está vazia e o processo é encerrado de forma anormal.

Como consertar esse problema? Eu tentei algumas combinações de sinalizadores, xargsmas todas falharam ...

Responder1

mvreclama porque não recebe nenhum argumento de xargs. Adicione -rpara evitar xargsa execução se a entrada estiver vazia:

   -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.

Além disso, você pode controlar mvo comportamento quando o 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

Então:

... |  xargs -r mv -f -t new

No entanto, seu comando apresenta sérios problemas quando há novas linhas ou até espaços em seus arquivos. Em geral,não analise a saída dels.

informação relacionada