No seu exemplo, você não precisa usar xargs
nada, pois find
fará exatamente e com segurança o que deseja fazer.
Exatamente o que você deseja usar find
é:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
Neste exemplo, -maxdepth 1
significa apenas pesquisar no diretório atual, não desça em nenhum subdiretório; por padrão, o find irá procurar em todos os subdiretórios (que geralmente é o que você deseja), a menos que você o restrinja com maxdepth. O {}
é o nome do arquivo que será substituído em seu lugar e +
é um dos dois marcadores de fim de comando, sendo o outro ;
. A diferença entre eles é que isso ;
significa executar o comando em cada arquivo, um de cada vez, enquanto que +
executar o comando em todos os arquivos de uma só vez. Observe, no entanto, que seu shell provavelmente tentará se interpretar ;
; portanto, você precisará escapar dele com um \;
ou outro ';'
. Sim, find
tem uma série de pequenos aborrecimentos como esse, mas seu poder mais do que compensa isso.
Ambos find
e xargs
são difíceis de aprender em primeiro lugar. Para ajudá-lo a aprender, xargs
tente usar a opção -p
ou, --interactive
que mostra o comando que está prestes a executar e pergunta se você deseja executá-lo ou não.
Da mesma forma que find
você pode usar -ok
no lugar de -exec
para perguntar se você deseja ou não executar o comando.
Porém, há momentos em find
que não é possível fazer tudo o que você deseja e é aí que xargs
entra. O -exec
comando aceita apenas uma instância de {}
exibição; portanto, se você receber um erro, find -type f -exec cp {} {}.bak \;
poderá fazê-lo da seguinte maneira :find -type f -print0 | xargs -0 -l1 -IX cp X X.bak
Você pode aprender mais sobre comandos de execução no manual do GNU Findutils .
Mencionei também que find
o que você quer com segurança faz porque, ao lidar com arquivos, encontrará espaços e outros caracteres que causarão problemas, a xargs
menos que você use a opção -0
ou --null
junto com algo que gere itens de entrada finalizados por um caractere nulo. do espaço em branco.
xargs
e$(...)
), xargs é muito mais seguro que a substituição de comando. E não me lembro de ter encontrado um nome de arquivo legítimo com uma nova linha. Os problemas de escape e expansão de palavras não são problemas com a substituição de comandos, e não xargs?