Я использую оболочку bash на OS X (10.7). У меня есть довольно много каталогов аудио файлов, как так:Как сравнить (в сценарии оболочки) два файла по базовому имени, а затем отбросить один?
dir/audio.mp3
dir/audio.m4a
Я хотел бы программно отбросить один из файлов, но как? Я знаю, как получить базовые имена:
find . -type f -exec basename -a {} + | sort | awk -F"." '{print $1}' | uniq -d
Но я в тупике, как «метка» в mp3s, скажем, так, что rm
может делать свое дело. В идеале я бы сохранил файлы с наивысшим битрейтом, но на данный момент сокращается расширение файлов.
Возможно, Perl - лучший инструмент, но я недостаточно разбираюсь в Perl, чтобы начать заниматься этим.
'basename' принимает только один файл за раз. Какой файл вы хотите отменить? Всегда ли это '.mp3', когда существуют' .mp3' и '.m4a'? Предположительно, если существует только один из двух возможных файлов с одним и тем же базовым именем, то вы хотите его сохранить. –
Я бы построил что-то вроде 'find. -type f -name '* .m4a' | xargs script2delete_mp3_IfExists'. Где 'script2delete ...' просто выводит текстовые строки типа 'rm dir/audio.mp3', которые вы можете посмотреть перед выполнением. Когда все выходные данные выглядят хорошо, вы можете передать это, как 'find ... | xargs ... |/bin/bash', и оболочка затем выполнит команды, переданные через канал. Тогда вы можете сделать 'script2delete..' настолько умным, насколько хотите, если он найдет mp3, он может подтвердить, что' ..m4a' имеет более высокий битрейт, но если нет, вывод будет 'rm dir/audio.m4a'. Удачи. – shellter
Джонатан, да, я бы всегда хотел отказаться от версии .mp3', но только если базовое имя дублируется с другим расширением. У меня также есть несколько файлов .flac, которые будут иметь приоритет. – sqldoug