我有一个包含数据文件和分析的磁盘备份。目录结构和名称并不是真正一致的。为了节省空间,我想压缩所有仅包含数据(*.txt
)的子目录,然后删除原始目录。在压缩子目录上有多个线程,但是在我所处的条件下却没有。
更准确地说:我不想将所有*.txt
文件压缩,而将仅包含txt文件的所有目录压缩到.zip目录中,并删除原始目录。
该脚本将存档,然后有选择地删除所有包含“ * .txt”文件且没有其他内容的文件夹。
folders=$(find . -type d -exec sh -c 'cd "$1";[ "$(ls *.txt 2>/dev/null)" ] \
&& [ -z "$(ls -ad * | grep -v '\.txt$')" ] && echo "$1"' sh {} \;)
echo "$folders" | zip -r@ archive && echo "$folders" | while read folder; do
echo "will remove $folder"
# Uncomment next line for the folder to be removed
# rm -rf "$folder"
done
编辑:这是创建单个zip文件的解决方案:
find . -depth -type d -exec sh -c '
cd "$1" || exit
[ "$(ls ./*.txt 2>/dev/null)" ] &&
[ -z "$(ls -ad ./* | grep -v '\.txt$')" ] &&
(
b=$(basename "$1")
cd ..
zip -r "$b.zip" "$b" && rm -rf "$b"
)' sh {} \;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句