技术解析
写了个 crontab 任务运行备份脚本,想把 hdd 文件夹中大于 100M 的文件及某些格式筛除后,再用 tar 打包放在 dropbox 目录下备份。试运行了下,发现遇到文件名中有空格的就报错,而且压缩出来的包明显比原文件夹大
$ find ./hdd -type f -size -100M -print0 | xargs tar -zcpf ~/Dropbox/backupfile/hdd-"$(date '+%Y-%m-%d').tar.gz" --null -T - --exclude='*psd' --exclude='*.key' ./hdd
tar: 2.jpg: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors.
所以我先把所有的空格
替换为_
,没报错了
find ./hdd -type f -name "* *" -exec rename "s/\s/_/g" {} \;
find ./hdd -type f -size -100M -print0 | xargs tar -zcpf ~/Dropbox/backupfile/hdd-"$(date '+%Y-%m-%d').tar.gz" --null -T美国服务器 - --exclude='*psd' --exclude='*.key' ./hdd
之后试了另一种写法,也不会报错
find ./hhd -type f -size -100M -print0 | xargs tar -czf ~/Dropbox/backupfile/hhd-"$(date '+%Y-%m-%d').tar.gz" --null -T - --exclude='*psd' --exclude='*.key' ./hhd
不明白问题出在哪里,还有另一个问题:压缩包里有个 PDF 文件大小为 187M,find 筛选无效怎么破?
我是 macOS 下的 tar,纯小白请勿见笑。