Excluindo subdiretórios sem remover seu conteúdo? [duplicado]

2

Eu tenho um diretório chamado music, que tem muitos álbuns e faixas separadas. Alguns deles estão em subdiretórios. O que eu quero é remover essas pastas e misturar todas as faixas no diretório de músicas sem separações.

Será difícil fazer isso manualmente, por isso estou procurando algumas comando.

    
por Gilles Quenot 26.02.2018 / 23:00

4 respostas

2

Sem find

shopt -s globstar
mv -nv **/*.mp3 /path/to/common/directory
    
por 27.02.2018 / 01:10
1
find . -mindepth 1 -type f -exec mv -i "{}" /common/path \;
find . -mindepth 1 -d -type d -exec rmdir "{}" \;

Isso moverá todas as músicas do diretório atual para /common/path e o segundo excluirá todos os diretórios. Então você pode mover todas as suas coisas de volta para o diretório original.

Além disso, isso perguntará se você deseja substituir arquivos com o mesmo nome.

    
por 26.02.2018 / 23:11
0
find /path/to/music/ -type f -execdir mv -n "{}" /path/to/sharedmusic/ \;

Os arquivos com nomes duplicados não serão movidos, mas deixados em seus locais originais.

    
por 26.02.2018 / 23:05
0

Você pode completar um achado para todos os arquivos nos subdiretórios e então fazer com que o comando find execute a movimentação para o diretório atual.

um exemplo disso é encontrado nesta resposta abaixo. link

Resposta entre as respostas: link

xargs is commonly used for this, and mv has a -t option to facilitate that.

find ./ -name '*article*' | xargs mv -t ../backup

If your find supports -exec ... \+ you could equivalently do

find ./ -name '*article*' -exec mv -t ../backup {}  \+

The -t option is probably a GNU extension. It's of course possible to roll your own, maybe something like

find ./ -name '*article*' -exec sh -c 'mv "$@" "$0"' ../backup {} \+

where we shamelessly abuse the convenient fact that the first argument after sh -c 'commands' ends up as the "script name" parameter in $0 so that we don't even need to shift it.

    
por 26.02.2018 / 23:07