Ainda não estou muito familiarizado com todos os truques grep/find/awk/xargs
.
Eu tenho alguns arquivos que correspondem a um padrão específico, digamos *.xxx
. Esses arquivos estão em locais aleatórios em um determinado diretório. Como posso encontrar todos esses arquivos e movê-los para uma pasta no meu diretório pessoal no Unix (que talvez ainda não exista)?
Respostas:
fonte
mv -i -t ~/dst {} +
Se você deseja mover todos os arquivos dentro de uma hierarquia de diretórios para um único diretório de destino, no bash ≥4 (coloque
shopt -s globstar
no seu~/.bashrc
) ou no zsh:Em outras conchas:
Como ler este
find
comando:.
: percorre o diretório atual-name '*.xxx'
: agir em arquivos cujo nome corresponda a esse padrão-exec … \;
: execute este comando em cada arquivo, substituindo{}
pelo caminho para o arquivoExiste um comando mais complexo
find
que é mais rápido se você tiver muitos arquivos, pois não precisará chamar ummv
processo separado para cada arquivo:O
+
no final dizfind
para chamar o comando em vários arquivos por vez. Comofind
só podemos colocar os nomes dos arquivos no final da linha de comando emv
precisamos ter o diretório de destino por último, usamos um shell intermediário para reorganizar os argumentos ("$0"
é o primeiro argumento para o shell~/new-directory
e"$@"
os argumentos subsequentes provenientes defind
expansão de{}
).fonte
Se você deseja replicar a estrutura de diretórios dos arquivos de origem correspondentes para o novo diretório de destino, pode usar a opção --parents do GNU cp :
fonte
você pode usar achado sem
-exec
bem:fonte
find -exec
é muito mais seguro; o acima falhará em nomes de arquivos que contenham espaço em branco, por exemplo.