将文件名通过目录递归匹配的文件压缩在一起

时间:2019-04-10 23:33:31

标签: bash unix terminal find zip

考虑这样的文件系统:

folderA
   - one.png
   - two.png
   - three.png

folderB
   - one.png
   - two.png
   - three.png

folderC
   - one.png
   - two.png
   - three.png

我想将与one.png匹配的所有.png文件压缩在一起,合并为名为one.zip的.zip文件。需要注意的重要一点是,它只应专门搜索文件名,而不能在文件内部查找,因为存在生成这些.png的代码,并且我不希望匹配任何不是实际.png的内容。

我尝试搜索,但是有了我知道要使用的关键字,我在 .zip文件中进行搜索得到了很多结果。

我在OSX Mojave上。不胜感激!

谢谢, 阿迪

2 个答案:

答案 0 :(得分:1)

好吧,您可能会发疯,将所有one.png文件放入one.zip,将所有two.png文件放入two.zip,依此类推:

for file in $( find -name \*.png | sed 's:.*/::' | sort -u ); do
    zip $(basename $file .png).zip $( find -name $file )
done

答案 1 :(得分:0)

base='one'
mapfile -t files < <(find . -name "${base}.png")
zip "${base}.zip" "${files[@]}"