我正在尝试为我的/var
目录中的所有文件制作一个 tar 存档。自然,我想排除其中的 Unix 套接字。
所以我尝试了一个看起来像这样的命令:
sudo find /var \! -type s -exec tar -rf ~/test/etc.tar {} \;
但这会引发重复的错误消息
tar format cannot archive socket:
当我尝试复制而不是 tar 时,我收到类似的错误:
cp: ./var/run/devd.pipe is a socket (not copied).
有谁知道为什么find
无法排除套接字类型的文件?例如,它能够排除目录类型的文件。
您还必须排除目录。如果不排除目录,
tar
将获取/var
(和其他目录)作为参数,并将继续将这些内容与所有内容(是否为套接字)一起归档。由于相同的原因(/var
包括/var/log/messages
等/var/log
),它会另外添加许多文件的多个副本。或者,如果您只想要常规文件和符号链接:
我选择在
-exec ... {} +
这里使用,而不是-exec ... {} ';'
因为我们可能希望tar
一次调用尽可能多的参数,尽可能少地调用。