Você pode usar cpio
no modo de cópia de cópia para isso.
find sourcedir -name "*.txt" | cpio -pd /junk
cpio
recebe uma lista de arquivos da entrada padrão e, no modo copiar-passar, copia os arquivos para o diretório de destino.
Se eu quiser encontrar algum arquivo com .txt no nome e para cada correspondência encontrada copiá-lo para a pasta /junk
, entendo que posso usar o seguinte:
find / -name ".txt" -exec cp {} /junk \;
Um pipe pode ser usado em vez de -exec
no comando acima?
Acho que me lembro de alguém dizendo que um cano vai correr de cada lado (do cano) ao mesmo tempo em que -exec
vai correr pelo lado esquerdo e depois pelo lado direito? Eu sinto falta de lembrar disso? O Pipe obviamente precisa obter a saída do comando esquerdo antes de fornecer a saída para o comando correto, por isso não vejo como eles podem ser executados ao mesmo tempo.
Você também pode encontrar o pipe no comando xargs
Os snippets nus de - link
Encontre todos os arquivos .mp3 na pasta de músicas e passe para o comando ls, -print0 será necessário se algum nome de arquivo contiver espaços em branco.:
find ./music -name "*.mp3" -print0 | xargs -0 ls
Encontre todos os arquivos na pasta de trabalho, passe para o grep e procure por lucro:
find ./work -print | xargs grep "profit"
Você precisa usar {} com vários comandos que levam mais de dois argumentos por vez. Por exemplo, o comando mv precisa saber o nome do arquivo. A seguir, você encontrará todos os arquivos .bak dentro ou abaixo do diretório atual e os moverá para o diretório ~ / .old.files:
find . -name "*.sh" -print0 | xargs -0 -I {} mv {} ~/back.scripts
Você pode renomear {} para outra coisa. No exemplo a seguir, {} é renomeado como arquivo. Isso é mais legível se comparado ao exemplo anterior:
find . -name "*.sh" -print0 | xargs -0 -I file mv file ~/back.scripts
Onde,
-0 Se houver espaços em branco ou caracteres (incluindo novas linhas), muitos comandos não funcionarão. Esta opção aceita os nomes dos arquivos com espaço em branco.
-I Substitui ocorrências de replace-str nos argumentos iniciais com nomes lidos da entrada padrão. Além disso, espaços em branco sem aspas não terminam itens de entrada; em vez disso, o separador é o caractere de nova linha.