1

У меня много музыки во многих каталогах:

./artist1/album1/*.mp3
./artist1/album2/*.mp3
./artist1/album3/*.mp3
./artist2/album1/*.mp3
./artist2/album2/*.mp3
./artist3/album1/*.mp3
./artist3/album2/*.mp3
... ...

Как я могу застегнуть их на это:

./artist1/album1/*.mp3  => ./artist1-album1.tar.gz
./artist1/album2/*.mp3  => ./artist1-album2.tar.gz
./artist1/album3/*.mp3  => ./artist1-album3.tar.gz
./artist2/album1/*.mp3  => ./artist2-album1.tar.gz
./artist2/album2/*.mp3  => ./artist2-album2.tar.gz
./artist3/album1/*.mp3  => ./artist3-album1.tar.gz
./artist3/album2/*.mp3  => ./artist3-album2.tar.gz
... ...

Я хотел бы однострочную команду или простой скрипт.

1 ответ1

2

tar:

for dir in */*/; do dir=${dir%/}; tar cf "${dir//\//-}.tar" "$dir"; done

zip:

for dir in */*/; do dir=${dir%/}; zip -0r "${dir//\//-}.zip" "$dir"; done

MP3-файлы содержат уже сжатые данные, которые не могут быть сжаты в дальнейшем - лучшее, что вы получите, это ~ 2%, и это будет во много раз медленнее - поэтому первый пример - просто архив tar

Если вы все еще хотите сжатие Gzip, добавьте опцию z (как в tar czf) и замените .tar на .tar.gz . Аналогично, опция -0 для zip отключает сжатие - измените -0r на -r для повторного включения.


${dir%/} удаляет окончание / из $dir

${dir//\//-} заменяет все / на -

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .