Estou tentando adicionar legendas para vários arquivos mkv. Eu uso este script para fazer isso:
for file in *.mkv; do "/Applications/Mkvtoolnix-7.0.0.app/Contents/MacOS/mkvmerge" -o "${file%\.*}(1).mkv" "(" "$file" ")" "(" "${file%\.*}.srt" ")" ; rm $file
Funciona bem apenas para o diretório raiz. Mas não funciona para todos os arquivos da subpasta. Por favor, ajude-me a fazê-lo funcionar para todos os arquivos da subpasta.
Responder1
Você poderia fazer algo assim:
# make bash function to do conversion and deletion
conv() {
/Applications/Mkvtoolnix-7.0.0.app/Contents/MacOS/mkvmerge -o "${1%\.*}(1).mkv" "(" "$1" ")" "(" "${1%\.*}.srt" ")"
rm "${1}"
}
# make conv function available to xargs
export -f conv
# recursively convert every .mkv file in current directory
find . -name "*.mkv" -type f -print0 | xargs -0 -n1 -I% bash -c 'conv "$@"' _ %
Responder2
Se você estiver usando bash
, faça
shopt-s globstar para arquivo em **/*.mkv fazer (seus comandos MKVmerge, etc.) feito
Definir a globstar
opção shell informa bash
para expandir **/
como todos os diretórios e subdiretórios.
PS Sempre cite todas as referências de variáveis do shell (a menos que você tenha um bom motivo para não fazê-lo e tenha certeza de que sabe o que está fazendo). Em particular, diga rm "$file"
em vez de rm $file
.