2013-02-10 4 views
1

cp을 사용하여 홈 디렉토리를 복사하려고하면, 원하는 것 이상이 복사됩니다. 다음은 으로이 문제를 보여줍니다. 실제로는 재귀 적으로 복사하고 싶지만,이 예제에서는 속도를 높이 지 못합니다.Git bash`cp` - "보호 된 운영체제 파일"을 제외하십시오. (무엇입니까?)

[email protected] ~ 
$ mkdir /c/test 

[email protected] ~ 
$ 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 

[email protected] ~ 
$ 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 파일을 복사하지 않겠습니다. 내가 재귀 적으로 복사하면, 나는 다음과 같은 폴더 (오른쪽으로 변환 시도)를 복사하고 싶지 않은 : 나는 recursivley을 복사하려고 경우 위에서 언급 한 모든 폴더가에서 생성됩니다

~/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) 

그들에게 권한이 거부 될 것으로 보인다 이후 대상,하지만 그들은 비어있게됩니다

: 위의 로그에서 볼 수 있듯이

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과 같이) 반투명합니다.

실제 사용은 shopt -s extglob; shopt -s dotglobsrc="/c/Users/Simon/!(AppData)" (--arcgive 재귀 복사를 의미한다는 통지)과 함께, 실제 복사를 할 cp $src "$dstdir" --update --archive --backup=numbered --verbose을 사용하는 작은 백업 스크립트, 그 중 하나가 관심이있는 경우입니다. 편집 : 내가 언급 한 백업 스크립트로 달성하고 싶은 것은 내 사용자 폴더 (가장 중요한 것은 내 문서, 사진 및 비디오뿐만 아니라 예를 들어 .ssh 및 .gitconfig에 일어나는 대부분의 파일을 백업하는 것입니다. (VonC의 대답을 따르지 않는 한) 거기에 있어야합니다. Git bash는 이미 설치되어 있으므로 사용하면되고 원하는 백업을 수행하는 아주 간단한 방법을 제공합니다. 그것은 힘내와 아무런 관련이 없다. 추가 편집을 참조하십시오.

그럼 cp 명령이이 파일을 복사하지 못하게 할 수 있습니까? (? 또는, 나는 cp보다는 뭔가 다른 (모호한 질문, 내가 아는를 사용하지만, 주요 아니다, 필요하다면 나는 정교한한다).)

원래 하위 질문 : 그리고 이러한 무엇인가 파일? (내가 아는 한, Windows XP에서 많은 폴더가 "일반"폴더로 존재합니다.) 편집 : 아마도 Windows XP에서 남은 부분은 적어도 Local Settings is입니다.

편집 : 지금 VonC에 대한 해결책과 옵션, 감사의 많음이 내 루트 문제가 될 것으로 보인다 파일을 백업의 목적을 위해 :

내가 %HOME%, /c/git에 설정을하는 이미 모든 repos를 보관하고있는 곳이기 때문에 모든 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, xxcopy 또는 robocopy로, 아마 백업에 대한 더 나은 이해하지만 지금은 내가 cp되지는 Windows 명령 줄에 뛰어해야하는 단순함을 선호합니다.

백업에 대한 오랜 의견은 누군가에게 유용하기를 바랍니다. 나는 "cp 이외의 다른 것을 사용해야합니까?"라고 생각합니다. 질문에 완전히 대답하고 내 주요 문제가 대부분 해결되었습니다.

여전히 "cp 명령이이/이러한 파일을 복사하지 못하게하려면 어떻게해야합니까?" 질문은 미해결 상태로 남아 있으며 ("Windows 특정 도구 사용"답변 제외) 많은 사람들에게 관련이 있습니다.

답변

0

백업을 스크립팅하는 것은 당신이 후에 어떤 경우는 CP를 피하기 위해 가장 좋은 것입니다, 그리고 xxcopy처럼, 윈도우 유틸리티를 사용
그것은, 증분 포함한, with exclusion list을 bazckup 시나리오의 모든 종류를 관리 할 수 ​​있습니다.


원래 자식 중심의 대답

git-cmd.batgit-bash 줘야의 ltry 및 정의되지 않은 %USERPROFILE%%HOME% 경우 사용 둘.

난 당신이 자식 (.gitconfig, _netrc, .ssh, ...)를 사용할 필요가 것만 포함하기 위해 HOME 위해서는 호출 자식 명령 전에 %HOME%변수 환경을 정의 을 권장하고 개발하는 것입니다.

그런 식으로, /c/Users/aLoginName 인 광대 한 엉망을 분류하려고 시도하는 대신 cp에 정확히 필요한 것을 제어 할 수 있습니다.

+0

좋은 조언이지만, 내가 찾는 것이 아닙니다. 나는 나의 질문을 분명히 할 것이다. – lydell

+0

@lydell이 이해하고 귀하의 질문은 이제 매우 분명합니다. 나는 나의 대답을 편집하고 대안을 제안했다. – VonC

+0

감사합니다. "Original git-centric answer"는 결국 "git-centric"이 아니라는 사실이 밝혀졌습니다. 그것은 대다수의 부작용을 줄뿐만 아니라 대부분 내 문제를 해결하는 데 도움이되었습니다! (내 편집 참조) – lydell