
写了个 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 - ``` |