Existe também uma outra maneira de fazer isso, o que eu acho que irá se adequar perfeitamente ao seu propósito. Você pode combinar find
com um loop while
e nem mesmo usar exec
ou xargs
. Se, por exemplo, você quisesse copiar seu mp3s
de sua pasta de download para sua pasta de músicas, você usaria o seguinte script, que eu usei muitas vezes.
Você pode modificá-lo como quiser, alterando os diretórios que find
procura e coloca os arquivos resultantes em; se nenhum diretório for informado, find
pesquisará a pasta base inteira. Você também pode alterar cp
para mv
ou outros comandos. É bem rápido, já que testei com 3945% de arquivos.jpg
! Copie-o em um editor de texto, salve-o e torne-o executável executando chmod +x myscript
.
#!/bin/bash
# a script to recursively find and copy files to a desired location
find ~/Downloads -type f -iname '*.mp3' -print0 |
while IFS= read -r -d '' f;
do cp -- "$f" ~/Music ;
done
Neste famoso Bash wiki , é mostrado como é útil combinar o while
loop e read
comandos para processar a saída do comando find
; e a maneira como eu fiz isso garante que o script não seja quebrado se encontrar nomes de arquivos com espaços ou outros caracteres inesperados ou especiais.
Para mais informações gerais sobre o comando find
, digite no terminal man find
ou veja o manpages do Ubuntu online . Para uma ótima introdução ao uso da descoberta, consulte este artigo também.