Atualmente, executo o Plex em um Beelink executando o Ubuntu e, até o momento, todos os arquivos associados a cada filme (arquivo de filme, imagens associadas e legendas) estão todos no mesmo diretório pai. Na maioria das vezes, isso é bom, mas para filmes com várias legendas, pode ficar confuso. Por exemplo:
/Movies
/Avatar (2009)
Avatar (2009).mkv
Avatar (2009).eng.srt
Avatar (2009).en.forced.ass
Avatar (2009).en.sdh.srt
Avatar (2009).de.srt
Avatar (2009).de.sdh.forced.srt
Parece que agora o plex encontrará lugares de legendas em uma pasta "subs" ou "subtitles". Então, para arrumar as coisas, como posso percorrer recursivamente o diretório do filme pai e, para cada pasta de filme individual, mover quaisquer arquivos de legendas para uma pasta "subtitles" assim?
/Movies
/Avatar (2009)
Avatar (2009).mkv
/Subtitles
Avatar (2009).eng.srt
Avatar (2009).en.sdh.srt
Avatar (2009).de.srt
Avatar (2009).de.sdh.forced.srt
Para programas de TV, pode haver vários níveis na pasta pai, por exemplo
**Old:**
/TV Shows
/Game Of Thrones
/Season 02
Game Of Thrones - s02e03.mp4
Game Of Thrones - s02e03.eng.srt
Game Of Thrones - s02e03.en.forced.srt
**New:**
TV Shows
/Game Of Thrones
/Season 01
Game Of Thrones - s01e03.mp4
Game Of Thrones - s01e04.mp4
/Subtitles
Game Of Thrones - s01e03.eng.srt
Game Of Thrones - s01e04.eng.srt
/Season 02
Game Of Thrones - s02e03.mp4
/Subs
Game Of Thrones - s02e03.eng.srt
Game Of Thrones - s02e03.en.forced.srt
Melhor ainda seria a opção de mover somente se ainda não estiver em uma pasta de legendas ...
Encontrará o caminho de cada
.srt
arquivo no diretório de trabalho atual, recursivamente, excluindo aqueles contidos em um diretório chamado "Legendas", imprimindo apenas seu nome base e filtrando duplicatas, criando um diretório "Legendas" dentro de cada caminho resultante (se não existir) e movendo cada.srt
arquivo em seu nível para dentro dele.Ele lidará com
.srt
arquivos localizados em qualquer profundidade do diretório de trabalho atual e também com o diretório "Programas de TV".O comando executará um teste; se a saída parecer boa, execute o comando real:
Aqui está outra abordagem. Use
globstar
a opção do bash para permitir a recursão em subdiretórios. Deman bash
:Então,
**/
só corresponderá a diretórios, mas incluirá subdiretórios. Com isso em mente, você pode fazer:Testei usando este conjunto de arquivos e diretórios:
Depois de executar o comando acima, obtive:
Note que ele lançará alguns avisos para casos em que não há arquivos srt em um diretório, pois ele tentará executar
mv directory_name/*srt directory_name/Subtitles
, mas como o*.srt
glob não corresponde a nada, ele retornará a si mesmo (a menos que você tenha anullglob
opção ativada) e, como não há nenhum arquivo cujo nome seja literalmente*srt
, ele falhará. É também por isso que tive que adicionarrmdir **/Subtitles
para removerSubtitles
diretórios vazios. Você pode adicionar com segurança2> /dev/null
ao final domv
comando para ocultar esses avisos.Como alternativa, você pode fazer algo um pouco mais complexo e criar o diretório somente e tentar copiá-lo quando tiver certeza de que possui
*.srt
os arquivos:O que resulta na saída desejada em uma única passagem. Para evitar mover arquivos se eles já estiverem em um
Subtitles
diretório, use aextglob
opção bash que permite que você crie globs mais complexos, e apenas procure por qualquer diretório cujo nome não sejaSubtitles
: