Primeiro, você precisará replicar a estrutura de diretórios no novo diretório principal. Dentro do diretório original que contém os arquivos .mp4, execute find . -type d >dirs.txt
. Isso armazenará todos os diretórios e seus caminhos em dirs.txt
. Em seguida, altere o diretório para o novo diretório superior e execute xargs mkdir -p <dirs.txt
. Isso criará a mesma estrutura de diretórios que o original.
Para alterar o formato e armazenar os arquivos em um diretório diferente, execute o seguinte comando dentro do diretório superior original.
find . -name "*.mp4" -exec bash -c 'var=${1%.mp4}; var=${var#*/};ffmpeg -i "${1#*/}" -vn -acodec libmp3lame -ac 2 -qscale:a 4 -ar 48000 "~/PATH/to/NewTopDIr/$var".mp3' - '{}' \;
Explicação
find . -name "*.mp4"
localiza todos os arquivos do tipo .mp4. -exec bash -c
executa o comando bash fornecido na sequência subsequente para cada arquivo encontrado. Ele também passa o nome do arquivo como variável , que pode ser usado no comando bash.
Neste ponto, contém algo como
./path/file.mp4
. Para remover o tipo de arquivo *.mp4
, usamos var=${1%.mp4}
, que armazena ./path/file
a $var
. Agora, removemos o ./
precedente com var=${var#*/}
, portanto, o valor de $var
é path/file
.
No comando ffmpeg
, obtemos o nome do arquivo atual com ${var#*/}
, que dá caminho / arquivo.mp4 e obtemos o arquivo de saída com ~/PATH/to/NewTopDIr/$var".mp3
, em que $var
tem o valor path/file
, conforme explicado acima.