Como incluir diretórios e subdiretórios em um arquivo em lotes

0

Eu encontrei um script de arquivo em lote para fazer o trabalho que preciso fazer. Eu coloquei a questão de como adicionar diretórios e subdiretórios de forma recursiva no processo em lote em um comentário no post de onde obtive este código, mas ninguém respondeu após 4 meses. Não consegui encontrar uma resposta para essa pergunta pesquisando neste site, então imaginei que iria iniciar um novo tópico sobre o assunto.

O que eu queria fazer era conseguir alterar as informações de metadados em massa em arquivos MKV, o que foi realizado dessa forma.

#!/bin/bash

# This script takes all mkv files in the current directory and sets the filename
# (without .mkv) as its title in metadata

for mkvfile in *.mkv; do
mkvpropedit "$mkvfile" -e info -s title="${mkvfile::-4}"
done

Como posso modificar isso para ser executado em um diretório raiz para incluir todas as pastas e subpastas no processo? Obrigada!

    
por TheMegolith 10.05.2018 / 20:50

1 resposta

2

Com o bash, você definiria as opções globstar e nullglob shell e usaria ** para recursar em subdiretórios:

shopt -s globstar nullglob
for mkvfile in **/*.mkv; do
    mkvpropedit "$mkvfile" -e info -s title="${mkvfile::-4}"
done

Veja 4.3.2 O Shopt Builtin no manual.

Note que você também pode usar ${mkvfile%.mkv} para cortar a extensão.

Você também pode usar o find, mas acho que ficou muito feio

find . -name '*.mkv' -exec sh -c 'mkvpropedit "$1" -e info -s title="$(basename "${1%.mkv}")"' sh {} \;
    
por glenn jackman 10.05.2018 / 21:00