Se eu entendi isso corretamente, você só precisa procurar .mp3
arquivos e mover aqueles para os quais existe um arquivo .m4a
equivalente no mesmo diretório. O script bash
a seguir fará isso, mas não encontrará pares duplicados de arquivos MP3 / M4A que existam em diretórios diferentes uns dos outros. Note que é importante obter a citação de variáveis corretas, pois os arquivos de música geralmente têm muitos espaços em seus nomes e bash
interpreta espaços como itens de separação nas listas.
#!/bin/bash
# Name of directory under which you music is stored.
SOURCE_DIR=/path/to/current/music/dir
# Name of directory you want to move the MP3s to.
DEST_DIR=/path/to/mp3/destination/dir
# Create the destination directory for the moved MP3s, if it doesn't already exist.
[ ! -d $DEST_DIR ] && mkdir -p $DEST_DIR
# Search for .mp3 files starting in $SOURCE_DIR
find $SOURCE_DIR -type f -name "*.mp3" | while read fin
do
# Create the equivalent file name with .m4a extension.
fm4a=${fin/.mp3/.m4a}
# If a file with .m4a extension exists, move the .mp3 file to the destination dir.
# In the event of a file name clash in the destination dir, the incoming file has
# a number appended to its name to prevent overwritng of the existing files.
[ -f "$fm4a" ] && mv -v --backup=numbered "$fin" $DEST_DIR/
done
##
## End of script.
##
Antes de executar essa versão, sugiro substituir a linha antes de done
pela seguinte linha como uma espécie de execução a seco, para que você possa ter uma ideia do que será movido:
[ -f "$fm4a" ] && echo "Moving $fin to $DEST_DIR/"
(Comentários de sugestão que corrigem meu uso perigoso de find
e while
.)