recursion复制隐藏文件 – Linux

有一个简单的方法recursion地复制目录中的所有隐藏文件到另一个目录? 我想备份主目录中的所有设置文件,而不是普通文件。 我试过了:

cp -R .* directory 

但它承认...和recursion地复制所有非隐藏的文件。 有没有办法让cp忽略...

总的来说,我最喜欢移动Dirs:

 tar cvf - . | (cd /dest/dir; tar xvf -) 

它将当前目录加速到stdout,然后将其pipe理到一个子shell,该子shell在解压缩stdin之前首先将cd移到目标目录。 简单,直接,可扩展 – 考虑将()与sshreplace为另一台机器时发生的情况。 或者回答你的问题,你可能会这样做:

 tar cvf - .* --exclude=\. --exclude=\.\. | (cd /dest/dir; tar xvf -) 

几乎每一次都可以通过以下方式解决:

 cp -R .[a-zA-Z0-9]* directory 

有一个隐藏的文件不是以其中一个字符开头的,这是非常不寻常的。

其他模式匹配可用( .??* .[^.]* ) – 请参阅注释

我恳求你,远离cp命令行上的纯shell扩展 – shell扩展有各种各样的“有趣”的angular落情况(由..和..,空格,不可打印的东西,硬链接,符号链接,等等。)使用find来代替(它在findutils包中,如果你没有安装它 – 这将是奇怪的,所有的发行版默认安装它):

 find -H /path/to/toplevel/dir/ -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec cp -a '{}' /path/to/destination/dir/ \; 

一步一步的解释:

  • -H将导致find不遵循符号链接(除非实际的顶层目录名称是符号链接;否则将遵循)。
  • /path/to/toplevel/dir/显然应该由你用path来代替你要备份的设置文件和目录的目录。
  • -maxdepth 1将停止findrecursion-maxdepth 1名称以点开头的任何目录中。 我们不需要这个caching, cp会为我们做这个,我们只需要这个级别的名字。
  • -name '.*'告诉我们需要所有以点开头的名字。 如果设置了环境variablesPOSIXLY_CORRECT ,这将无法正常工作,但很less(如果有的话)是。 这是我们迄今为止指定的第一个匹配条件。
  • a \( ....... \)是一个在括号后面跟着更复杂的条件(我用…..来代替它,下面解释)。我们需要从括号中跳过,因为它们否则会被shell的(错误的)解释,因此它们前面的反斜杠,
  • -type d -o -type f -o -type l是它们之间之间的三个条件。 -type d匹配目录, -type f匹配常规文件, -type l匹配符号链接。 你可以select你想要的东西 – 例如,如果你不想备份设置目录,显然省略-type d (和-o就在它后面)。
  • -exec ..... \; 告诉find每次遇到匹配时执行一个命令。 命令的结尾用分号标记,我们需要用反斜线来避免shell解释。 在该命令行中,您需要在需要当前遇到的匹配名称的地方使用{} 。 由于贝壳也可能会曲解大括号,因此应将它们放在撇号中,如'{}' 。 在这种情况下,我们要执行的命令是cp -a '{}' /path/to/destination/dir/ (-a表示存档,它在子目录中recursion,将链接复制为链接,并保留权限和扩展属性, /path/to/destination/dir/显然是目标目录的名称 – 将其replace。)

所以,用简单的英文,这个find命令行就这样说:

从/ path /到/ topervel / dir /开始。 不要下到任何子目录。 查找名称以点开头的所有目录,文件和符号链接。 对于find的所有人,将其复制到/ path / to / destination / dir /保留自然,权限和扩展属性。

我一直使用。* *来查找隐藏的文件,而没有得到“。” 和“..”。 它可能会错过“.a”或其他东西,但我从来没有其中之一。

你可以使用rsync

 rsync -a ./ /some/other/directory/ 

将复制当前目录的内容(包括点文件,但不包括..

这里有更好的答案; https://superuser.com/questions/61611/how-to-copy-with-cp-to-include-hidden-files-and-hidden-directories-and-their-con

它描述了例如使用shopt的本地bash解决scheme