您可以使用此命令备份目录中的所有dotfile(.<something>
)$HOME
:
$ cd ~
$ find . -maxdepth 1 -type f -name ".*" -exec tar zcvf dotfiles.tar.gz {} +
正则表达式仅使用tar?
方法1
我对此进行了相当多的研究,结果空白了。限制因素是,在tar
执行时将其排除在外,/
当tar执行其模式匹配时,与目录一起显示的尾部斜杠()不是等式的一部分。
这是一个例子:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*/'} .*
.qalculate/
.qt/
.qterm/
.qtoctave/
.RapidSVN
.RData
.Rhistory
此变体包括一个排除项.*/
,您可以通过打开tar的详细开关来查看-v
这些目录正在通过该排除项。
方法#2
我以为可能会切换,--no-wildcards-match-slash
还是--wildcards-match-slash
会放松的贪婪,.*/
但这也没有效果。
将斜杠排除在排除之外.*
也不是一个选择,因为这将告诉tar
您排除所有点文件和点目录:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*'} .*
$
方法3(丑陋!)
因此,我能想到的唯一其他选择是为提供文件列表tar
。像这样:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --wildcards-match-slash --exclude={'.','..','.*/'} $(ls -aF | grep -E "^\..*[^/]$")
.RapidSVN
.RData
.Rhistory
如果文件数超过了将参数传递给命令的最大空间,这种方法就会出现问题。另一个是丑陋且过于复杂。
那我们学到了什么?
使用tar
&正则表达式似乎没有一种简单而优雅的方法来完成此任务。因此,@ terdon的评论find ... | tar ...
确实是更合适的方法。