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


30

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

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

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'

Respostas:


23

você pode usar o find com xargs para isso

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

O comando -I no comando acima informa ao xargs qual sequência de substituição você deseja usar (caso contrário, adiciona os argumentos ao final do comando).

OU
No seu comando, apenas tente mover '{}' após o mvcomando.

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


11
por favor, não esqueça de fazer backup antes de tentar os comandos acima :-).
Hemant

2
Btw, para o primeiro -print0 para localizar e -0 para xargs deve ser usado da maneira possível, para evitar espaços em branco nos problemas de nome de arquivo.
maxschlepzig 03/09/10

@maxschlepzig: bom ponto. Eu vou editar.
Hemant

2
Eu sugiro usar mv -iaqui, assim você não corre o risco de sobrescrever arquivos se algo inesperado acontecer.
Gilles 'SO- stop be evil'

2
com o mv do gnu core utils, você pode usar mv -t <targetdir>e + em vez de \;

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

Você meio que trocou os argumentos para mv


9

No zsh ou no bash 4, para reunir todos os *.oggarquivos em /somedir:

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

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

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

além do bash em conveniente
Mark
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.