한 위치에서 다른 위치로 폴더를 복사하려고 합니다. 폴더 크기는 약 6.4GB입니다.
그래서 내가 그랬어
cp -r source_folder level1/val
그런 다음 level1 폴더로 이동하여 다음을 확인합니다.
level1$ ls
val
하지만 val에 CD를 넣으려고 하면 오류가 발생합니다.
level1$ cd val
-bash: cd: val: No such file or directory
그리고 아무것도 복사하지 않는 것 같습니다.
level1$ du -sh val
0 val
또한 디렉토리가 존재하는지 Python으로 확인했지만 존재하지 않는다고 표시됩니다.
>>> import os
>>> os.path.exists('level1/val')
False
내가 만든 폴더도 삭제할 수 없습니다.
level1$ rmdir val
rmdir: failed to remove 'val': Not a directory
반면에 파일처럼 삭제할 수 있습니다.
level1$ rm val
level1$ ls
level1$
무슨 일이야? 폴더가 올바르게 복사되었는지 어떻게 확인합니까?
편집하다ls -ld source_folder level1/val
반환된 출력이 추가되었습니다.
lrwxrwxrwx 1 user1 dinfk 4 Jun 20 12:05 source_folder -> test
drwxr-sr-x 2 user2 systems 4096 Aug 27 19:02 level1/val
답변1
source_folder
- 디렉토리를 참조하는 심볼릭 test
링크 입니다.
그러나 심볼릭 링크의 디렉터리 경로는 상대적입니다. 심볼릭 링크(예 /home/user/test
: )에서 절대 경로를 사용하면 복사가 정상적으로 수행됩니다.
심볼릭 링크가 가리키는 디렉터리의 모든 파일을 복사하려면 -d
명령에 옵션을 사용 하면 됩니다 cp
.
답변2
분명히 val
첫 번째 사본 라운드에서는 깨진 결과가 나왔습니다.심볼릭 링크.
ls
존재하기 때문에 나열됨val
: 라는 디렉토리 항목이 있습니다val
.cd val
val
심볼릭 링크가 끊어졌기 때문에 "해당 파일이나 디렉터리가 없습니다"라고 표시됩니다 .cd
링크의 대상에 대한 액세스가 필요하지만 대상이 존재하지 않습니다(깨진 기호 링크의 정의).du val
심볼릭 링크는 저장 공간을 사용하지 않으므로 0을 표시합니다. (이름과 메타데이터를 위한 공간은 계산되지 않습니다.)os.path.exists
False
깨진 심볼릭 링크를 반환합니다 .rmdir val
val
이것이 심볼릭 링크이기 때문에 디렉토리가 아니라고 올바르게 불평합니다 .rm val
해당 파일은 디렉터리가 아니므val
로 정상적으로 삭제하세요 .val
귀하는 다음을 보고합니다:
lrwxrwxrwx 1 user1 dinfk 4 Jun 20 12:05 source_folder -> test
이 명령은 cp -r
기호 링크를 기호 링크로 복사합니다. source_folder
이는 심볼릭 링크 타겟팅이므로 심볼릭 링크 타겟팅이 test
발생합니다 . 심볼릭 링크의 대상은 단순한 문자열이며 아무것도 "추적"하지 않습니다. a로 시작하지 않는 심볼릭 링크는 상대적입니다. 는 대상이 를 가리키는 심볼릭 링크입니다 . 심볼릭 링크가 존재하지 않기 때문에 깨졌습니다.level1/val
test
/
level1/val
test
level1/test
level1/test
나중에 본 내용은 다음과 같습니다.
drwxr-sr-x 2 user2 systems 4096 Aug 27 19:02 level1/val
이번에는 다른 작업을 수행하여 디렉토리 트리를 복사합니다.
링크 대상만 복사하고 링크 자체는 복사하지 않으려면 다음을 사용하세요.
cp -r source_folder/ level1/val
후행 슬래시는 cp
명령이 기호 링크 자체가 아닌 링크가 가리키는 디렉토리에서 작동하도록 지시합니다. 인수가 디렉터리인 경우에는 아무런 차이가 없습니다.
답변3
제안된 해결 방법이 작동하지 않는 특정 문제가 있는 것으로 보이는 경우 디렉터리 이름의 철자가 올바른지 확인하고 이름에 있는 특수(ASCII가 아닌) 문자에 특히 주의하십시오.
제 경우에는 다음과 같은 상황에 직면했습니다.
$ ll
total 68
-rw-r--r-- 1 st_ac131646 st_us-031110 1387 29. Jun 10:02 cu2_o2_nh3_6-1_60.xyz
-rw-r--r-- 1 st_ac131646 st_us-031110 1387 29. Jun 10:03 cu2_o2_nh3_6-2_20.xyz
drwxr-xr-x 2 st_ac131646 st_us-031110 4096 29. Jun 09:17 rḱs
drwxr-xr-x 2 st_ac131646 st_us-031110 4096 29. Jun 13:20 tests
cd rks
그러나 예를 들어 또는 를 시도하면 rmdir rks
시스템은 항상 그러한 파일이나 디렉토리가 존재하지 않는다고 알려줍니다. 심지어 이 작업을 수행할 수도 mkdir rks
있으며 이제 갑자기 ls
해당 이름을 가진 두 번째 디렉터리가 출력에 나타납니다(예상대로 액세스 가능).
어쨌든, 자세히 살펴보면 실수로 ḱ
일반 디렉토리 대신에 첫 번째 디렉토리를 생성한 것이 틀림없기 k
때문에 이름을 rks
(대신에 rḱs
)로 입력하면 시스템에서 해당 디렉토리가 존재하지 않는다고 말하는 것 같습니다.
간단히 말해서: 철자를 다시 확인하고 출력에서 이름을 복사하여 붙여넣어 보세요 ls
.