我有很多目录中的音乐:
./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//\//-}
全部替换/
为-