Como posso mover arquivos com xargs no Linux?

21

Estou tentando isso e não está funcionando:

ls file_* | xargs mv {} temp/

Alguma idéia?

    
por Peter Mortensen 08.01.2013 / 05:03

5 respostas

27

No OS X:

ls file_* | xargs -J {} mv {} temp/

No Linux:

ls file_* | xargs -i {} mv {} temp/
    
por 08.01.2013 / 05:05
8

find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;

find é melhor que ls , onde pode haver mais arquivos que o número de argumentos de programa permitidos pelo seu shell.

    
por 08.01.2013 / 05:08
8

Use -t "especifica o alvo directoty" em mv, ele deve trabalhar movendo arquivos * para o diretório de destino / temp

ex: - #ls -l arquivo * | xargs mv -t / temp

    
por 06.03.2014 / 11:11
3

Como sugerido por @ user1953864: { -i , -J } especifique um token que será substituído pelos argumentos recebidos.

Por exemplo, ls :

something.java  exampleModel.java  NewsQueryImpl.java  readme someDirectory/

Em seguida, mover todos os arquivos java para a pasta someDirectory com xargs seria o seguinte:

No Linux

ls *.java | xargs -i mv {} someDirectory/

No MacOS

ls *.java | xargs -J mv {} someDirectory
    
por 04.07.2014 / 17:16
0

Outra solução pode ser:

 for f in file_* ; do
   mv $f temp/$f
 done

A desvantagem é que ele cria um novo processo mv para cada arquivo.

    
por 08.01.2013 / 07:15

Tags