我用tar命令,
tar -cvf protTests.tar protTests/*
到tar
该文件夹内的所有文件,protTests
。但这包括文件夹内的符号链接,这不是所需的链接。
是否有一个命令行选项,将忽略所有符号链接?
我用tar命令,
tar -cvf protTests.tar protTests/*
到tar
该文件夹内的所有文件,protTests
。但这包括文件夹内的符号链接,这不是所需的链接。
是否有一个命令行选项,将忽略所有符号链接?
Answers:
您可以这样做,以提供除符号链接tar
文件protTests
之外的所有文件的列表:
find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
tar --null --files-from - -cvf protTests.tar
顺便说一句,您现有的命令:
tar -cvf protTests.tar protTests/*
将不会归档中的所有文件protTests
,只会归档名称不以.
(不隐藏)开头的文件。该*
水珠运营商跳过的文件,其名称开头.
的设计。该命令还具有以下问题:如果protTests
文件很多(超过数千个),则protTests/*
可以扩展到太多参数而无法容纳在命令行中。
像这样的简单命令不会有这些问题:
tar -cvf protTests.tar protTests
star
是一个很好的选择,因此,我对此表示反对。我也同意“有趣的字符”的反对意见,但是由于GNU tar
没有-0
选择权,所以这是一个折衷方案。我不同意性能异议,在这种情况下,这实际上没有任何影响。
tar
和bsdtar
具有--files-from
和--null
其去除滑稽字符问题(如果与组合find
的-print0
或-exec printf '%s\0' {} +
)。但是在这里,您可能想要添加该--no-recursion
选项。一些pax
实现也有一个-0
选项。
我的tar实现是最好的方法
star -cv -f out.tar -find protTests ! -type l
zsh: command not found: star
当您提到知道实用程序超过99%的读者不会在您的系统上使用的实用程序时,请说明从何处获取它们。并且,当您提及自己的产品时(无论是否发布链接,都必须公开您的隶属关系,因此您最好发布链接)。
--files-from
,这是gtar的选项,因此您提供这样的建议,更好的是,这是gtar特定的。Find没有primary-not
,这是另一个不可移植的GNUism。通常,使用单独的find调用是一个坏主意。这可能会给文件名中的有趣字符带来问题,并且由于find和tar都需要扫描文件系统,因此肯定会降低性能。这些问题不适用于像star这样使用libfind并因此合并了查找代码的程序。