Git bash`cp' - 排除“受保护的操作系统文件”(那些是什么?)

时间:2013-02-10 22:07:36

标签: windows-7 cp git-bash protected-folders

如果我尝试使用Git bash中的cp复制我的主目录(在Windows 7上),将复制超过我想要的内容。以下是演示此问题的示例。实际上我想要递归复制,但我不是在这个例子中加快速度。

Simon@SIMONS-DATOR ~
$ mkdir /c/test

Simon@SIMONS-DATOR ~
$ cp ./* /c/test
cp: omitting directory `./AppData'
cp: omitting directory `./Contacts'
cp: omitting directory `./Cookies'
cp: omitting directory `./Desktop'
cp: omitting directory `./Documents'
cp: omitting directory `./Downloads'
cp: omitting directory `./Dropbox'
cp: omitting directory `./Favorites'
cp: omitting directory `./GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}'
cp: omitting directory `./Links'
cp: omitting directory `./Lokala inst\303\244llningar'
cp: omitting directory `./Mallar'
cp: omitting directory `./Mina dokument'
cp: omitting directory `./Music'
cp: `./NTUSER.DAT.exe' and `/c/test/NTUSER.DAT' are the same file
cp: omitting directory `./N\303\244tverket'
cp: omitting directory `./Pictures'
cp: omitting directory `./Programdata'
cp: omitting directory `./Recent'
cp: omitting directory `./Saved Games'
cp: omitting directory `./Searches'
cp: omitting directory `./SendTo'
cp: omitting directory `./Skrivare'
cp: omitting directory `./Start-meny'
cp: omitting directory `./Videos'
cp: `./ntuser.dat.LOG1.exe' and `/c/test/ntuser.dat.LOG1' are the same file
cp: `./ntuser.dat.LOG2.exe' and `/c/test/ntuser.dat.LOG2' are the same file

Simon@SIMONS-DATOR ~
$ ls /c/test
NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TM.blf
NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TMContainer00000000000000000001.regtrans-ms
NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TMContainer00000000000000000002.regtrans-ms
NTUSER.DAT{6a7ede06-4c18-11e0-86c3-00262d9124f7}.TM.blf
NTUSER.DAT{6a7ede06-4c18-11e0-86c3-00262d9124f7}.TMContainer00000000000000000001.regtrans-ms
NTUSER.DAT{6a7ede06-4c18-11e0-86c3-00262d9124f7}.TMContainer00000000000000000002.regtrans-ms
NTUSER.DAT{8ef111c8-e816-11df-8bd5-00262d9124f7}.TM.blf
NTUSER.DAT{8ef111c8-e816-11df-8bd5-00262d9124f7}.TMContainer00000000000000000001.regtrans-ms
NTUSER.DAT{8ef111c8-e816-11df-8bd5-00262d9124f7}.TMContainer00000000000000000002.regtrans-ms
NTUSER.DAT{e9e59e5b-940d-11e0-8662-00262d9124f7}.TM.blf
NTUSER.DAT{e9e59e5b-940d-11e0-8662-00262d9124f7}.TMContainer00000000000000000001.regtrans-ms
NTUSER.DAT{e9e59e5b-940d-11e0-8662-00262d9124f7}.TMContainer00000000000000000002.regtrans-ms
_.swp
_viminfo
ntuser.ini
php_errors.log

我不希望复制这些ntuser文件。如果我递归复制,我不希望复制以下文件夹(向右翻译尝试):

~/Contacts
~/Cookies
~/Lokala inställningar    (Local settings)
~/Mallar                  (Templates)
~/Mina dokument           (My documents)
~/Nätverket               (The network)
~/Programdata
~/Recent
~/SendTo
~/Skrivare                (Printers)
~/Start-meny              (Start menu)

如果我尝试复制recursivley,上面提到的所有文件夹都将在目的地创建,但由于对它们的许可似乎被拒绝,它们将保持为空:

cp: cannot access `/c/Users/Simon/Cookies': Permission denied
cp: cannot access `/c/Users/Simon/Documents/Min musik': Permission denied
cp: cannot access `/c/Users/Simon/Documents/Mina bilder': Permission denied
cp: cannot access `/c/Users/Simon/Documents/Mina videoklipp': Permission denied
cp: cannot access `/c/Users/Simon/Lokala inst\303\244llningar': Permission denied
cp: cannot access `/c/Users/Simon/Mallar': Permission denied
cp: cannot access `/c/Users/Simon/Mina dokument': Permission denied
`/c/Users/Simon/NTUSER.DAT' -> `/e/Backup/Simon/NTUSER.DAT'
cp: `/c/Users/Simon/NTUSER.DAT.exe' and `/e/Backup/Simon/NTUSER.DAT' are the same file
cp: cannot access `/c/Users/Simon/N\303\244tverket': Permission denied
cp: cannot access `/c/Users/Simon/Programdata': Permission denied
cp: cannot access `/c/Users/Simon/Recent': Permission denied
cp: cannot access `/c/Users/Simon/SendTo': Permission denied
cp: cannot access `/c/Users/Simon/Skrivare': Permission denied
cp: cannot access `/c/Users/Simon/Start-meny': Permission denied
`/c/Users/Simon/ntuser.dat.LOG1' -> `/e/Backup/Simon/ntuser.dat.LOG1'
cp: `/c/Users/Simon/ntuser.dat.LOG1.exe' and `/e/Backup/Simon/ntuser.dat.LOG1' are the same file
`/c/Users/Simon/ntuser.dat.LOG2' -> `/e/Backup/Simon/ntuser.dat.LOG2'
cp: `/c/Users/Simon/ntuser.dat.LOG2.exe' and `/e/Backup/Simon/ntuser.dat.LOG2' are the same file

从上面的日志中可以看出,~/Documents中似乎还有其他不需要的文件夹(向右翻译):

./Min musik          (My music)
./Mina bilder        (My pictures)
./Mina videoklipp    (My video clips)

无论如何,由于权限被拒绝,我不会从这个问题中受到太多影响:我的目标文件夹中会有一些额外的不必要的空文件夹和一些额外的不必要的文件,以及一些“权限被拒绝”的抱怨来自日志中的cp

在使用cp命令进行实验之前,我甚至都不知道这些文件。显然,必须取消选中“文件夹选项中隐藏受保护的操作系统文件(推荐)”,才能在Windows资源管理器中显示它们,然后,当它们出现时,它们上面有一个小箭头,就像快捷方式一样,它们是半透明的,因为隐藏文件(如~/AppData)。

真正的用法是使用cp $src "$dstdir" --update --archive --backup=numbered --verbose进行实际复制的小型备份脚本shopt -s extglob; shopt -s dotglobsrc="/c/Users/Simon/!(AppData)"(注意--arcgive意味着递归复制) ,如果有任何感兴趣的话。 编辑:应该注意的是,我想要通过提到的备份脚本实现的目的是备份我的用户文件夹中的大多数文件(最重要的是我的文档,图片和视频,但也包括例如.ssh和恰好在那里的.gitconfig(除非我遵循VonC的回答))。我碰巧使用Git bash,因为我已经安装了它,它提供了一种非常简单的方法来进行我想要的备份。它与Git无关。另请参阅进一步编辑。

那么如何阻止cp命令尝试复制这些文件呢? (或者,我应该使用除cp之外的其他东西吗?(模糊的问题,我知道,但它不是主要问题,如果需要,我可以详细说明。)

最初是一个子问题:这些文件是什么? (据我所知,其中许多文件在Windows XP中作为更多“普通”文件夹存在。)编辑:它们可能是Windows XP中的剩余文件,至少是Local Settings is

修改 为了备份文件,这似乎是我的根本问题,我现在有很多解决方案和选项,感谢VonC:

我已将%HOME%设置为/c/git,这是我已保留所有存储库的地方,因此所有Git(bash)文件都可在一个位置使用。此外,它简化了备份:我可以轻松地指出更具体的目标,而不是备份/c/Users/Simon/!(AppData)(如上所述):

"/c/Users/Simon/Documents/*"
"/c/Users/Simon/Music/*"
"/c/Users/Simon/Pictures/*"
"/c/Users/Simon/Videos/*"
"/c/Users/Simon/Desktop/*"

因此,我已经避免了主要是的问题,~/Documents中仍然存在不需要的文件夹(见上文)。

我现在明白Windows专用工具,例如xcopyxxcopyrobocopy,可能更适合备份,但是现在我更喜欢{{1}的简单性而且不必深入Windows命令行。

我希望这些冗长的备份评论对某人有用。我认为“我应该使用除cp以外的其他东西吗?”问题得到了充分回答,我的主要问题基本解决了。

仍然,“如何阻止cp命令尝试复制这些/此类文件?”问题仍未解决(除了“使用Windows特定工具”之外)答案)并且可能与许多人有关。

1 个答案:

答案 0 :(得分:0)

如果您正在编写备份脚本,最好避免使用cp,并使用Windows实用程序,例如xxcopy
它可以管理所有类型的bazckup场景,包括增量场景,with exclusion list


以git为中心的原始答案

如果%USERPROFILE%未定义,则git-cmd.batgit-bash都会使用%HOME%

我建议在调用git命令之前定义环境变量%HOME% ,以便HOME只包含您需要的内容使用git(.gitconfig_netrc.ssh,...),并开发。

通过这种方式,您可以准确控制cp所需的内容,而不是尝试解决/c/Users/aLoginName的大量混乱。