1

如果我尝试使用cpGit bash(在 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 dotgloband src="/c/Users/Simon/!(AppData)"(注意这意味着递归复制)。编辑:应该注意的是,我想用提到的备份脚本实现的是备份我的用户文件夹中的大多数文件(最重要的是我的文档、图片和视频,还有例如 .ssh 和 .gitconfig ,它们恰好在那里(除非我遵循 VonC 回答的建议))。我只是碰巧使用了 Git bash,因为我已经安装了它,它提供了一种非常简单的方法来进行我想要的备份。它与 Git 无关。另请参阅下面的附加编辑。--arcgive

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

最初是一个子问题:这些文件是什么?(据我记得,它们中的许多作为 Windows XP 上更“普通”的文件夹存在。)编辑:它们可能是 Windows XP 的剩余部分,至少本地设置是.

编辑: 出于备份文件的目的,这似乎是我的根本问题,感谢 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(见上文)。

xcopy我现在明白,Windows 特定工具(例如xxcopyrobocopy)可能更适合备份,但现在我更喜欢它的简单性,cp而不必深入研究 Windows 命令行。

我希望这些关于备份的冗长评论对某人有用。我考虑“我应该使用其他东西cp吗?” 问题得到了充分回答,我的主要问题大部分解决了。

不过,“我怎样才能阻止cp命令尝试复制这些/此类文件?” 问题仍未解决(除了“使用 Windows 特定工具”之类的答案)并且可能与许多人相关。

4

1 回答 1

0

如果脚本备份是您所追求的,最好避免使用 cp,并使用 Windows 实用程序,如xxcopy
它可以管理各种 bazckup 场景,包括增量场景,带有排除列表


以 git 为中心的原始答案

git-cmd.bat和wilgit-bash都尝试使用%USERPROFILE%if%HOME%没有定义。

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

这样,您就可以准确地控制您需要做的事情cp,而不是试图解决大量的混乱/c/Users/aLoginName

于 2013-02-11T07:12:26.983 回答