我使用的是 CentOS7,当我使用命令时
cp /root/test/.* /root/test1
它还复制..
,复制源父目录中的所有文件和文件夹。
如何避免复制.
和..
?
答案1
问题中没有明确说明是否要复制仅有的隐藏名称,或者您是否要复制所有文件。同样,是否要复制任何子目录的内容。我假设你想复制仅有的隐藏名称是当前目录(因为您似乎想要使用命令执行此操作)。
您的命令不会复制父目录中的所有文件,除非您还使用-R
选项 with cp
(或-r
with GNU cp
)来执行递归复制。如果没有该-R
选项,cp
则会抱怨.
和..
是目录,但不会复制它们。
在bash
shell 中,将GLOBIGNORE
shell 变量设置为:
您不希望 shell 将文件名通配模式扩展为的 - 分隔名称列表,
GLOBIGNORE='.:..'
然后复制你的文件,
cp /root/test/.* /root/test1
要临时设置GLOBIGNORE
,仅用于复制操作,请使用子 shell:
( GLOBIGNORE='.:..'; cp /root/test/.* /root/test1 )
答案2
通配以点开头的所有名称(除了.
和 )的标准习惯用法..
是.??*
。所以你的命令是
cp /root/test/.??* /root/test1