Eu tenho um monte de arquivos .zip em vários diretórios:
Fol1/Fol2
Fol3
Fol4/Fol5
Como eu moveria todos eles para uma pasta base comum?
command-line
files
find
recursive
InquilineKea
fonte
fonte
Respostas:
Vá para o diretório de nível superior da árvore que contém os arquivos zip (
cd …
) e executeIsso funciona imediatamente no zsh. Se o seu shell for bash, você precisará executar
shopt -s globstar
primeiro (você pode e deve colocar este comando no seu~/.bashrc
). Se o seu shell for ksh, você precisará executarset -o globstar
primeiro (coloque-o no seu~/.kshrc
).Como alternativa, use
find
, que funciona em qualquer lugar sem preparação especial, mas é mais complicado:Se você deseja remover diretórios vazios posteriormente, no zsh:
No bash ou ksh:
e repita enquanto houver diretórios vazios para remover. Como alternativa, em qualquer shell
fonte
find
comando acima funcionou no bash, mas teve que mudar parafind . -name
etc para fazê-lo funcionar..
está implícito para o GNU find, mas não para outros, eu o adicionei explicitamente.Se você quiser apenas mover os
.zip
arquivos, poderá fazer algo comofonte
Se você estiver usando o bash versão 4 ou superior ou zsh, também poderá usar globbing recursivo:
Isso moverá SOMENTE os arquivos e não seus caminhos relativos; portanto, podem ocorrer colisões.
fonte
Este é seguro ao mover dados e livre de erros, o que é compatível com a maioria das distribuições, independentemente das versões. Este comando varrerá subdiretórios e depois moverá ou copiará para o novo diretório de destino.
*.flac
para algo como*.zip
no seu caso. Ou*.doc
qualquer extensão funciona.mv
é o comando para mover arquivos, ou você pode usarcp
para copiar dados em vez de mover../flac/
é o diretório de destino para o qual desejo mover todos os arquivos FLAC. Você também pode fornecer um caminho completo, como/home/myid/flac/
Exemplo completo. (neste caso, existem muitos subdiretórios com o nome do artista de música em
/home/myid/Music/
e, em seguida, os arquivos FLAC estão em diferentes níveis de subdiretórios. Como não preciso de pastas de artistas, mas quero ter todos os arquivos FLAC em um diretório em/home/myid/Music/flac/
Em seguida, ele exibirá todos os arquivos FLAC.
fonte
;
faz?Como um hack do bash, você pode usar o poder de
tar
:Isso tem a vantagem de não depender de extensões de arquivo, pois usa o
file
comando para escolher os arquivos a serem movidos e preserva a estrutura de diretórios, mas não funciona com caminhos que contêm espaços.A final
rm
está lá apenas para remover os arquivos originais (porque @InquilineKea diz que ele não se importa com a pasta original no comentário).Obviamente, isso é particularmente adequado se as pastas de origem / destino / estiverem em discos diferentes. Caso contrário, as outras soluções propostas são mais eficientes (mesmo que sejam baseadas em convenções de nomenclatura, em vez do
file
conteúdo).fonte
Supondo que você tenha as versões GNU de find e mv, o seguinte será mais eficiente do que as respostas existentes baseadas em localização:
Usar um
+
no final do find -exec significa que uma lista de arquivos será passada para o comando mv, em vez de executar um comando mv por arquivo encontrado. No entanto, uma limitação disso é que você só pode colocar o '{}' no final do comando, o que requer o uso da opção mv --target-directory e, tanto quanto eu sei, é um GNU-ism.fonte