У меня есть большая музыка в большом количестве каталогов:
./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
... ...
Я хотел бы одну команду строки или простой сценарий.
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//\//-}
замены все /
с -