No Linux, pelo menos, /o final é opcional. Você pode incluí-lo se quiser, mas não é necessário.
8113 Scott
4
@ user1953864: -i(ou -J) especifique um token que será substituído pelos argumentos recebidos, em vez de apenas serem pregados no final. man xargs
Amadan
14
Você pode precisar dizer -i{}, sem espaço. Ou diga -I {}.
Scott
1
Percebo que usar "%" no lugar de "{}" também funciona - o que% significa e o que {} significa? Exemplo: ls file_ * | xargs -I% mv% temp /
dmonopoly
3
@monopoly: Eles não significam nada. Seja qual for o parâmetro -i, ele está sendo substituído. ls file_* | xargs -iFOO mv FOO temp/funciona exatamente da mesma maneira.
Observe que a pergunta sugere um desejo de processar apenas os file_*arquivos no diretório atual, enquanto find(sem opções adicionais) pesquisará toda a árvore de diretórios no diretório atual.
"melhor" é subjetivo. Mais poderoso, mais complexo e mais lento; e embora mvnão se importe se você processa arquivos juntos ou individualmente, alguns outros usos podem.
Amadan
Editado (adicionado -maxdepth 0)
8
Use -t "especifique directoty de destino" no mv, ele deve funcionar movendo arquivos * para o diretório / temp de destino
xargs -n10
por exemplo)Respostas:
No OS X:
No Linux:
fonte
/
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 quels
onde pode haver mais arquivos que o número de argumentos do programa permitido pelo seu shell.fonte
file_*
arquivos no diretório atual, enquantofind
(sem opções adicionais) pesquisará toda a árvore de diretórios no diretório atual.-maxdepth 0
para evitar isso.mv
não se importe se você processa arquivos juntos ou individualmente, alguns outros usos podem.-maxdepth 0
)Use -t "especifique directoty de destino" no mv, ele deve funcionar movendo arquivos * para o diretório / temp de destino
ex: - arquivo #ls -l * | xargs mv -t / temp
fonte
Conforme sugerido por @ user1953864: {
-i
,-J
} especifique um token que será substituído pelos argumentos recebidos.Por exemplo
ls
:Em seguida, mover todos os arquivos java para a pasta someDirectory
xargs
seria o seguinte:No Linux
No MacOS
fonte
Outra solução pode ser:
A desvantagem é que ele bifurca um novo
mv
processo para cada arquivo.fonte