Как скопировать набор файлов и структуры папок с идентичными именами, но различными расширениями файла

Позвольте мне снабдить это предисловием путем высказывания, что я - новичок Linux, чтобы быть уверенным. Я ищу способ скопировать файлы с тем же именем, но другим расширением файла.

Некоторый фон:

У меня есть большое количество музыки. Подавляющее большинство находится в .flac формате. Для проигрывания моего набора в моем автомобиле, я транскодировал все это в различные форматы файлов. У меня есть библиотека источника .flac файлы и затем идентичное соответствие .mp3 и .m4a (AAC) транскодированные библиотеки, из-за различных форматов файлов, поддерживаемых автомобилями, которыми мы владеем. У меня есть флеш-накопитель в моем автомобиле, который поддерживает AAC и воспроизведение MP3, но не flac. На флеш-накопителе музыка, которую я выбрал из более крупной библиотеки по своему компьютеру. Я имею, не хотят для большого количества полных альбомов, и таким образом у меня только есть файлы на моей карте флэш-памяти, которую я вручаю выбранный из более крупной библиотеки.

Теперь, мы продали наш старый автомобиль и купили новый и эти поддержки воспроизведение FLAC. Вместо того, чтобы вручную соответствовать дорожкам flac на новом флеш-накопителе с mp3 отслеживает на старом, я задавался вопросом, будет ли возможно через терминал соответствовать содержанию от Flashdrive1 с основной библиотекой COMPUTER1 и затем скопировать соответствующие подобранные имена файлов с желаемым типом файла и соответствующей структурой папок к FLASHDRIVE2

tl:dr

возьмите содержание от:

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

найдите соответствующую .flac версию с идентичной файловой структурой и схемой именования, только другой формат файла в:

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

копия к:

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

*В этом гипотетическом, Дорожка 03 опускаемый, потому что это не существует на Flashdrive1 и поэтому не хотеть это на Flashdrive2

Я знаю, что должен вызвать, находят и устанавливают тип файла и что grep был бы включен, но я испытываю затруднения, придумывающие правильный синтаксис. Я погуглил для любых подобных вопросов, но не смог найти любого, которые достигают того, что я надеюсь делать. Если я не выглядел достаточно твердым, не стесняйтесь гореть меня. Однако справка значительно ценилась бы.

0
задан 1 November 2016 в 17:21

1 ответ

Вместо grep, Вы могли бы использовать sed:

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

В порядке:

  • find, чтобы найти файлы MP3 и распечатать их относительные пути, разделенные символом ASCII NUL (\0)
  • sed для замены .mp3 и конец с .flac, с помощью -z для обработки NUL-разграниченных лаймов.
  • rsync для копирования файлов, в то время как сдерживающая структура каталогов и полномочия (-a), читая в путях к файлам для копирования с stdin (--files-from=-), с помощью NUL-разграниченных строк (-0).

Эти --dry-run используется, чтобы моделировать копирование, наблюдать вывод и работать снова без опции, если это смотрит хорошо.

2
ответ дан 28 September 2019 в 06:53

Другие вопросы по тегам:

Похожие вопросы: