如何压缩并重命名目录树

如何压缩并重命名目录树

我有很多目录中的音乐:

./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

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//\//-}全部替换/-

相关内容