我正在尝试备份我的 Eclipse.metadata
目录。我运行的命令是:
cp -Rf ~/some/where/.metadata/* ~/some/backup/.metadata/.
我第一次尝试这个时,复制跳过了锁定文件和.plugins
目录.mylyn
。经过一番研究,我发现一些线程提到了权限更改。我应用了更改并取得了一些成功。
现在,运行脚本不会创建或遍历.plugins
或.mylyn
目录。其他研究没有得出任何结果。
我在用:
Windows XP SP3
Cygwin 1.7.1-1
答案1
*
中的通配符~/some/where/.metadata/*
不匹配以点开头的文件或目录。这是大多数 shell 的行为,而不仅仅是 Cygwin。一些替代方案:
- 使用另一个参数明确包含点文件
cp -Rf ~/some/where/.metadata/* ~/some/where/.metadata/.* ~/some/backup/.metadata/.
(.*
匹配以两个或更多点开头的文件和目录)
- 使用不使用通配符的表达式:
cp -Rf ~/some/where/.metadata/ ~/some/backup/
- 使用
tar cf - | tar xf -
习语
tar cf - ~/some/where/.metadata | (cd ~/some/backup/.metadata ; tar xf -)
答案2
我更喜欢使用rsync
或cpio
复制目录:
rsync -acv --delete . DST
find . | cpio -pudvm DST
我想我是少数使用 的人之一cpio
;这是在 SysV 机器上工作时养成的老习惯。它的缺点是您必须从当前目录复制:如果您将绝对路径传递给find
,则该路径将在目标目录中复制。另一方面,rsync
根据 SRC 目录是否带有尾部斜杠,它有自己的怪异之处。