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, xargs
mas todas falharam ...
Responder1
mv
reclama porque não recebe nenhum argumento de xargs
. Adicione -r
para evitar xargs
a 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 mv
o 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
.