Como copiar conjunto de arquivos e estrutura de pastas com nomes idênticos, mas com extensões de arquivo diferentes

0

Deixe-me começar por dizer que sou um principiante do Linux para ter certeza. Estou procurando uma maneira de copiar arquivos com o mesmo nome, mas com uma extensão de arquivo diferente.

Alguns antecedentes:

Eu tenho uma grande coleção de músicas. A grande maioria está no formato .flac. Para reproduzir minha coleção no meu carro, transcodifiquei tudo em diferentes formatos de arquivo. Eu tenho uma biblioteca de arquivos .flac de origem e, em seguida, idênticas bibliotecas transcodificadas .mp3 e .m4a (AAC), devido a vários formatos de arquivo suportados pelos carros que possuímos. Eu tenho uma unidade flash no meu carro que suporta AAC e reprodução de MP3, mas não flac. Na unidade flash é a música que eu selecionei da biblioteca maior no meu computador. Eu não tenho necessidade de muitos álbuns completos e, portanto, eu só tenho arquivos no meu flashdrive que eu escolhi da maior biblioteca.

Agora, vendemos nosso carro antigo e compramos um novo, e este é compatível com a reprodução FLAC. Em vez de combinar manualmente as faixas flac na nova unidade flash com as faixas mp3 da antiga, fiquei imaginando se seria possível, por meio do terminal, coincidir com o conteúdo da Flashdrive1 com a biblioteca principal COMPUTER1 e depois copiar os nomes de arquivos correspondentes correspondentes. o tipo de arquivo desejado e estrutura de pastas apropriada para FLASHDRIVE2

tl: dr

obtenha o conteúdo de:

FLASHDRIVE1
    \Artist
        \Album
             tracktitle.mp3
             02 tracktitle.mp3

localize a versão .flac correspondente com estrutura de arquivos e esquema de nomenclatura idênticos, somente formato de arquivo diferente em:

COMPUTER1
    \Artist
        \Album
             tracktitle.flac
             | 02 tracktitle.flac
             | 03 tracktitle.flac

copie para:

FLASHDRIVE2
    \Artist
        \Album
             tracktitle.flac
              | 02 tracktitle.flac

* Nesta hipotética, Track 03 sendo omitido porque não existe no Flashdrive1 e, portanto, não o deseja no Flashdrive2

Eu sei que tenho que invocar find e definir o tipo de arquivo e que o grep estaria envolvido, mas estou tendo problemas para criar a sintaxe apropriada. Eu pesquisei por quaisquer perguntas semelhantes, mas não consegui encontrar nenhuma que alcançasse o que estou procurando fazer. Se eu não tiver olhado com força o suficiente, sinta-se à vontade para me chamar. No entanto, a ajuda seria muito apreciada.

    
por Initium 01.11.2016 / 15:18

1 resposta

2

Em vez de grep , você pode usar sed :

find /path/to/flashdrive -iname '*.mp3' -printf '%P
find /path/to/flashdrive -iname '*.mp3' -printf '%P%pre%' |
 sed -z 's/\.mp3$/.flac/' | 
 rsync -aP --files-from=- -0 /path/to/computer1 /path/to/flashdrive  --dry-run
' | sed -z 's/\.mp3$/.flac/' | rsync -aP --files-from=- -0 /path/to/computer1 /path/to/flashdrive --dry-run

Em ordem:

  • find para encontrar os arquivos MP3 e imprimir seus caminhos relativos, separados pelo caractere ASCII NUL ( sed )
  • .mp3 para substituir .flac e o final com -z , usando rsync para processar limões delimitados por NUL.
  • -a para copiar os arquivos enquanto retém a estrutura de diretório e as permissões ( --files-from=- ), lendo em caminhos de arquivo para copiar de stdin ( -0 ), usando linhas delimitadas por NUL ( --dry-run ).

O %code% é usado para simular a cópia, observar a saída e executar novamente sem a opção se parecer OK.

    
por muru 01.11.2016 / 15:31