Как архивировать и переименовать дерево каталогов

У меня есть большая музыка в большом количестве каталогов:

./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
задан 30.12.2010, 11:15

1 ответ

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%, и это было бы много раз медленнее - таким образом, первый пример просто a tar архив.

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


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

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

2
ответ дан 12.12.2019, 13:01

Теги

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