Позвольте мне снабдить это предисловием путем высказывания, что я - новичок 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 был бы включен, но я испытываю затруднения, придумывающие правильный синтаксис. Я погуглил для любых подобных вопросов, но не смог найти любого, которые достигают того, что я надеюсь делать. Если я не выглядел достаточно твердым, не стесняйтесь гореть меня. Однако справка значительно ценилась бы.
Вместо 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
используется, чтобы моделировать копирование, наблюдать вывод и работать снова без опции, если это смотрит хорошо.