Como posso mover arquivos por tipo recursivamente de um diretório e seus subdiretórios para outro diretório?

27

Qual seria uma boa maneira de mover um tipo de arquivo de um diretório e de todos os seus subdiretórios?

Como "mova tudo * .ogg em / thisdir recursivamente para / somedir". Eu tentei algumas coisas; meu melhor esforço foi (ainda não tão bom assim):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

Ele retornou em cada linha antes de cada nome de arquivo,

mv: cannot overwrite non-directory '/thisdir/*.ogg' with directory '/somedir'
    
por Steve Burdine 03.09.2010 / 22:32

3 respostas

20

você pode usar o find com xargs para isso

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

The -I in the above command tells xargs what replacement string you want to use (otherwise it adds the arguments to the end of the command).

OR
Em seu comando, apenas tente mover '{}' após o comando mv .

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;

    
por 03.09.2010 / 23:00
9
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

Você meio que trocou os argumentos por mv

    
por 03.09.2010 / 23:03
7

Em zsh ou bash 4, para reunir todos os arquivos *.ogg em /somedir :

mv /thisdir/**/*.ogg /somedir

Se você quisesse reproduzir a hierarquia de diretórios: (aviso, digitado diretamente no navegador)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir
    
por 03.09.2010 / 23:47