Como mover todos os arquivos com uma certa extensão de arquivo de subdiretórios para um único diretório

5

Eu tenho um diretório que contém muitos subdiretórios. Os subdiretórios contêm muitos tipos de arquivos com diferentes extensões de arquivo. Eu quero mover (não copiar) todos os arquivos de um tipo em um novo diretório. Eu preciso que todos esses arquivos estejam no mesmo diretório, ou seja, ele precisa ser plano.

(Meu caso de uso é que eu quero mover e-books chamados * .epub de vários diretórios para uma única pasta que um leitor de EPUB possa encontrar.)

    
por johntait.org 06.05.2013 / 23:54

3 respostas

11

No zsh, você pode usar um glob recursivo:

mkdir ~/epubs
mv -- **/*.epub ~/epubs/

No bash ≥4, execute shopt -s globstar (você pode colocar isso no seu ~/.bashrc ) e depois o comando acima. Em ksh, execute set -o globstar primeiro.

Com apenas ferramentas POSIX, execute find :

find . -name '*.epub' -exec mv {} ~/epubs \;
    
por 07.05.2013 / 03:10
4

Tente fazer isso:

mkdir ../new_dir
find . -type f -name '*.epub' -exec mv {} ../new_dir/ \;

se todos os arquivos tiverem o nome name.epub , será necessário incrementar uma variável como esta (usando )

mkdir ../new_dir
find . -type f -name '*.epub' |
    while read a; do
        ((c++))
        base="${a##*/}"
        mv "$a" "../new_dir/${base%.epub}_$(printf %.03d $c).epub"
    done
    
por 07.05.2013 / 00:02
3

Usando o bash no Linux:

shopt -s nullglob globstar
mv -t ~/epub_directory ~/big_dir/**/*.epub
    
por 07.05.2013 / 02:57