it-swarm-pt.com

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

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'
34
Steve Burdine

você pode usar 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 string de substituição você deseja usar (caso contrário, adiciona os argumentos ao final do comando).

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

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

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

Você meio que trocou os argumentos para mv

13
Coding District

No zsh ou bash 4, para reunir todos os *.ogg arquivos 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
10