技术解析

tar 命令请教
0
2021-06-11 22:55:26
idczone

写了个 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,纯小白请勿见笑。


我只用过 tar -xvf nodejs.xz

xargs -I{} tar ... "{}"

栗子:
```
[email&find . -maxdepth 1 -type f -name "wu*"
./wulala wakaka.doc
[email&find . -maxdepth 1 -type f -name "wu*" | xargs -I{} tar -zcpf wulala.tar.gz "{}"
[email&find . -maxdepth 1 -type f -name "wu*"
./wulala.tar.gz
./wulala wakaka.doc
```

另,tar 用法我没记错的话,最后的 positional 参数是“需要被压缩的文件”。
```
... tar -czf {path} --null -T - --exclude='*psd' --exclude='*.key' ./hhd
```
这样写的话除了你传给 tar 经过 find 的文件 tar 会压缩,tar 每次似乎还会压缩参数最后“./hhd”里面所有的文件

owwlo 确实是这样,反复压缩……谢谢!!自己搞定了,好像按下面写没问题。
```
find ./hdd -type f -size -100M -print0 | tar -zcpf ~/Movies/hdd-"$(date '+%Y-%m-%d').tar.gz" --exclude='*psd' --exclude='*.key' --null -T -
```

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服