写了个 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,纯小白请勿见笑。
1
WishMeLz 2021-04-22 10:09:36 +08:00
我只用过 tar -xvf nodejs.xz
|
2
owwlo 2021-04-22 10:28:11 +08:00
xargs -I{} tar ... "{}"
|
3
owwlo 2021-04-22 10:29:24 +08:00
栗子:
``` owwlo@owwlo-MS-7A72:~$ find . -maxdepth 1 -type f -name "wu*" ./wulala wakaka.doc owwlo@owwlo-MS-7A72:~$ find . -maxdepth 1 -type f -name "wu*" | xargs -I{} tar -zcpf wulala.tar.gz "{}" owwlo@owwlo-MS-7A72:~$ find . -maxdepth 1 -type f -name "wu*" ./wulala.tar.gz ./wulala wakaka.doc ``` |
4
owwlo 2021-04-22 10:37:46 +08:00
另,tar 用法我没记错的话,最后的 positional 参数是“需要被压缩的文件”。
``` ... tar -czf {path} --null -T - --exclude='*psd' --exclude='*.key' ./hhd ``` 这样写的话除了你传给 tar 经过 find 的文件 tar 会压缩,tar 每次似乎还会压缩参数最后“./hhd”里面所有的文件 |
5
dazkarieh OP owwlo #4 确实是这样,反复压缩……谢谢!!自己搞定了,好像按下面写没问题。
``` find ./hdd -type f -size -100M -print0 | tar -zcpf ~/Movies/hdd-"$(date '+%Y-%m-%d').tar.gz" --exclude='*psd' --exclude='*.key' --null -T - ``` |