Estou tentando isso e não está funcionando:
ls file_* | xargs mv {} temp/
Alguma ideia?
Estou tentando isso e não está funcionando:
ls file_* | xargs mv {} temp/
Alguma ideia?
Respostas:
No OS X:
ls file_* | xargs -J {} mv {} temp/
No Linux:
ls file_* | xargs -i {} mv {} temp/
/o final é opcional. Você pode incluí-lo se quiser, mas não é necessário.
-i(ou -J) especifique um token que será substituído pelos argumentos recebidos, em vez de apenas serem pregados no final. man xargs
-i{}, sem espaço. Ou diga -I {}.
-i, ele está sendo substituído. ls file_* | xargs -iFOO mv FOO temp/funciona exatamente da mesma maneira.
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
findé melhor do que lsonde pode haver mais arquivos que o número de argumentos do programa permitido pelo seu shell.
file_*arquivos no diretório atual, enquanto find(sem opções adicionais) pesquisará toda a árvore de diretórios no diretório atual.
mvnão se importe se você processa arquivos juntos ou individualmente, alguns outros usos podem.
Conforme 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 xargsseria o seguinte:
No Linux
ls *.java | xargs -i mv {} someDirectory/
No MacOS
ls *.java | xargs -J mv {} someDirectory
Outra solução pode ser:
for f in file_* ; do
mv $f temp/$f
done
A desvantagem é que ele bifurca um novo mvprocesso para cada arquivo.
xargs -n10por exemplo)