duplicar uma estrutura de pasta / arquivo usando um arquivo de espaço reservado

1

Eu tenho uma grande biblioteca de mídia digital. A maior parte é mantida "offline", mas o software de biblioteca que eu uso (Plex) usa arquivos de mídia para construir a biblioteca e, portanto, eu preciso usar arquivos de espaço reservado.

Usando 30 segundos "este arquivo é arquivado" vídeos eu posso catalogar filmes offline facilmente em Plex. Eu "rsync" a estrutura de diretórios sem arquivos e, em seguida, "fazer cp" um espaço reservado em cada diretório de filme e renomear usando o nome da pasta pai.

Para programas de TV, isso não é prático, pois pode haver centenas de episódios por programa. Gostaria de saber se existe uma maneira de duplicar a estrutura de pastas / arquivos de um programa de TV, com muitos episódios em uma única pasta, usando o mesmo arquivo de espaço reservado.

Acho que existe uma maneira de criar pastas a partir dos nomes dos arquivos, depois copiar o alocador de espaço em cada nova pasta, renomear usando o nome da pasta e, em seguida, mover os arquivos de volta para um único diretório, mas não sei como.

Jon Allen
fonte

Respostas:

1

Aqui está o que eu faria (pode haver maneiras mais eficientes de automatizar isso, mas isso é um truque rápido que deve alcançar o que você precisa). Espero ter entendido sua pergunta corretamente.

Para obter uma lista de todos os diretórios (e seus subdiretórios) dentro de um diretório existente:

Abra o Terminal e navegue até a pasta existente que contém a estrutura que você gostaria de duplicar (se você não estiver familiarizado com o Terminal, eu ficarei feliz em dar uma orientação mais específica sobre como fazer isso. Basicamente, se você pensar em Terminal como o Finder, a pasta padrão que você está "visualizando" quando você abre o Terminal é sua pasta de usuário. A partir daí, você pode digitar pwd para ver onde você está ls para ver uma lista de tudo no diretório atual, cd [folder name] para mover-se para uma pasta no diretório e cd .. para voltar um nível para o diretório pai).

Digite o seguinte comando:

find . -type d

Isto irá listar todos os diretórios contido no diretório atual , bem como cada um dos seus subdiretórios (ou seja, ele não irá parar de procurar até que não haja mais subdiretórios para entrar).

A lista terá entradas semelhantes a esta:

./directory1
./directory1/subdirectory1
./directory2
./directory2/sub2/sub3/sub4

Precisamos limpar a formatação um pouco antes de podermos usar este texto.

Para limpar o texto para que possa ser usado para recriar essa estrutura de pastas:

Copie esta lista em qualquer editor de texto simples (não no Microsoft Word); Eu uso o TextWrangler, mas o TextEdit vem com o seu computador. Usando o recurso localizar e substituir, remova todas as ocorrências de ./ (deixe a caixa "replace with" vazia e pressione replace all). Isso excluirá todos os períodos e barras iniciais, mas reterá barras subsequentes que indicam subdiretórios.

Além disso, exclua todas as novas linhas (ou seja, o texto pode ser agrupado em várias linhas, mas não deve haver novos parágrafos explícitos). O exemplo acima será parecido com:

directory1 directory1/subdirectory1 directory2 directory2/sub2/sub3/sub4

Para criar um número arbitrário de novas pastas com um comando:

Nota: Você também pode fazer esta etapa usando nomes de pasta de uma fonte diferente, fiquei um pouco confuso com a origem dos nomes das pastas em sua pergunta

Agora você deve ter uma lista de pastas / subpastas que esteja toda em uma linha (embora possa ser agrupada em várias linhas quando for renderizada em seu editor de texto) e não possua pontuação *. Copie todo este texto para sua área de transferência. Volte para o Terminal e use cd [folder], cd .., ls e pwd para navegar até a pasta de destino onde você deseja recriar a estrutura de pastas, conforme descrito acima.

Quando estiver na pasta correta, digite:

mkdir -p e depois comando v e aperte enter. Certifique-se de que existe um espaço (e nada mais) entre mkdir -p e o primeiro nome do diretório e um espaço entre cada nome de diretório subseqüente.

Eu sei que as pessoas têm diferentes níveis de familiaridade com o UNIX e o ambiente do Terminal, portanto, se isso for confuso, sinta-se à vontade para comentar quais etapas precisam de mais esclarecimentos.

* Observe que, se qualquer um dos nomes de diretório que você colar no Terminal tiver espaços ou caracteres não alfanuméricos, como (./'!?:_) etc, você precisa escapar deles ou não vai funcionar. Isto é, para cada espaço ou outro personagem estranho, você deve colocar um \ diretamente antes dele (observe a diferença entre \ e / ). assim music/the beatles torna-se music/the\ beatles. Você pode usar encontrar e substituir por isso também.

Luke Baumann
fonte
Obrigado por toda essa informação! Devo esclarecer que o objetivo final é pegar um arquivo de espaço reservado, por exemplo. "placeholder720p.mkv" e use esse arquivo para recriar o diretório de origem com os mesmos nomes de arquivo. Então, no final, terei uma pasta que parece idêntica à fonte, mas consiste nesse arquivo de espaço reservado duplicado várias vezes. Sua ideia funcionaria bem, exceto pelos muitos caracteres não alfanuméricos nos arquivos / pastas de origem. Existe outra maneira de conseguir isso, talvez usando um automator ou um script, que não seria prejudicado pela necessidade de colocar um \ antes de cada caractere não alfanumérico?
Jon Allen
@JonAllen Eu sou um idiota. Havia uma maneira muito mais simples de fazer isso, que toma como 2 linhas e lida com os caracteres especiais sem problema. Estou prestes a atualizar a resposta.
Luke Baumann
@ JonAllen desculpe, antes de responder você poderia confirmar (desculpe eu entendi mal antes): Você tem usado rsync e um loop cp, que funcionou bem para filmes, como normalmente há apenas um arquivo por pasta. No entanto, o desafio com programas de TV é que uma única pasta contém muitos arquivos e os nomes de arquivos não podem ser extraídos dos nomes das pastas. Então, na verdade, você já pode recriar a estrutura de pastas - o problema é copiar o mesmo arquivo de espaço reservado para que haja várias cópias (nomeadas corretamente) em cada pasta.
Luke Baumann
E então deixe-me perguntar também: Você tem alguma maneira de obter os dados da sua biblioteca em algum outro formato como um arquivo CSV ou XML, ou a estrutura de arquivos é a única representação disponível dos dados (por "dados" eu quero dizer os nomes e respectivos shows / temporadas de cada episódio em sua coleção)
Luke Baumann
Oi Luke, obrigado pela sua resposta. Sim, você entendeu o problema corretamente. O aplicativo plex mantém tudo em um banco de dados que pode ser extraído como um csv, mas não é formatado da mesma maneira que os nomes de arquivos. Seriam várias etapas extras para extrair e reformatar isso, repetir para cada show a ser arquivado. Muito mais fácil usar a estrutura de arquivos, se isso for possível.
Jon Allen