Como acessar pastas / subpastas / arquivos usando loops aninhados para conversões de arquivos?

0

Em uma estrutura como esta:

/home/me/Videos/Downloads/Videos/xml tutorials/Main/video1.mp4
/home/me/Videos/Downloads/Videos/xml tutorials/Main/video2.mp4
....
/home/me/Videos/Downloads/Videos/java tutorials/Main/video1.mp4
/home/me/Videos/Downloads/Videos/java tutorials/Main/video2.mp4
....

Eu preciso converter os vídeos e salvar os novos arquivos assim:

/home/me/Videos/Downloads/Videos/xml tutorials/Converted/video1.mp4
/home/me/Videos/Downloads/Videos/xml tutorials/Converted/video2.mp4
/home/me/Videos/Downloads/Videos/java tutorials/Converted/video1.mp4
/home/me/Videos/Downloads/Videos/java tutorials/Converted/video2.mp4

Eu quero converter esses vídeos usando ffmpeg executando um loop aninhado por meio do Folder/Subfolders/Videos .

Ao executar isso, posso percorrer todos os arquivos no diretório atual:

for f in *; do ffmpeg -i "$f" ... ; done

Como posso usar loops aninhados para isso, para que o próprio bash possa procurar automaticamente Videos/xml tutorials/main/ e fazer a conversão, colocá-los em Videos/xml tutorials/converted e se mover para Videos/java tutorials/main/ ?

    
por daddyodevil 20.04.2017 / 19:30

1 resposta

1

Finalmente descobri, provavelmente existe uma maneira mais eficiente / otimizada de fazê-lo, mas por enquanto o que quer que funcione. Mas ffmpeg não ocupou espaços em nomes, então teve que renomear todos eles substituindo espaço por sublinhado.

Na pasta Vídeos que possui os diferentes tutoriais, a execução deste trabalho -

for f in * ; do
  for g in "$f"/Main/* ; do
     ffmpeg -i "$g" -s 854x480 -c:v libx265 "$f"/Converted/$(basename $g)
  done
done

Aqui, $f obtém os nomes das pastas e, em seguida, $g obtém os nomes dos próprios arquivos, juntamente com seus caminhos e extensões.

    
por daddyodevil 21.04.2017 / 05:14