"ls"가 특정 디렉터리에 있을 때만 콘텐츠를 표시하는 이유는 무엇입니까?

"ls"가 특정 디렉터리에 있을 때만 콘텐츠를 표시하는 이유는 무엇입니까?

ls검색할 수 없는 매우 혼란스러운 동작에 직면했습니다 . 디렉토리에 내용이 있다는 것을 보여주지만 내용이 생성된 디렉토리에 있을 때만 나타납니다.

보여드리겠습니다:

ciprian Documents $ pwd
/Users/ciprian/Documents

ciprian Documents $ ls ../Downloads/rss22/
22rss-USB/

ciprian Documents $ ls ../Downloads/rss22/22rss-USB/
HTML/

ciprian Documents $ cd ../Downloads/rss22

ciprian rss22 $ ls

ciprian rss22 $ ls 22rss-USB/
gls: cannot access '22rss-USB/': No such file or directory

cd편집한 후에 ../Downloads/rss22는 내용이 비어 있는 것으로 나타납니다. I 다음 I 이면 여기의 첫 번째 경우처럼 cd ~/Desktop비어 있는 것으로 나타납니다 .ls ../Downloads/rss22/

나에게 이것은 다음과 같은 도구가 있을 수 있음을 시사합니다.../Downloads/rss22 ~에 Documents. 그런데 어떻게 표시해야 할지 모르겠어요. ls -a ~/Documents이 폴더와 관련된 내용은 표시되지 않습니다.

무슨 일이야?

이러한 파일은 아카이브에서 부분 추출을 시도하여 생성됩니다.unzip 22rss-USB.zip "22rss-USB/HTML/**/*" -d ../Downloads/rss22/

참고로 저는애플 시스템, 비록 그것이 중요하지 않다고 생각하지만(유닉스죠?) 저는 Bash 5.1.16(기본 zsh에서 변경됨)을 사용하고 있습니다.

: pwd의 출력은 type pwd쉘 내장 명령입니다.

cd -P ../Downloads/igarss22/이렇게 하면 내가 기대하는 대로 표시되는 것으로 나타났습니다 . 이에 대한 자세한 정보는 어디서 볼 수 있나요? man cd에 대해서는 아무것도 표시되지 않습니다 -P.

지금, 이후cd -P ../Downloads/igarss22/

ciprian Documents $ cd -P ../Downloads/igarss22

ciprian igarss22 $ pwd
/Users/ciprian/Library/CloudStorage/OneDrive/Downloads/igarss22

옳은. 그래서 나는 이것을 잊어버렸습니다. ~/Documents내 OneDrive 아래 폴더에 대한 심볼릭 링크입니다.

$ ll ~/ | grep Doc
lrwxr-xr-x    1 ciprian   38 May 19  2022 Documents -> /Users/ciprian/OneDrive/Documents

어떤 마법과 변화로 인해맥OS v12(몬트레이), 실제로 살고 있습니다 /Users/ciprian/Library/CloudStorage/OneDrive.

무슨 일이 일어났는지 아직도 잘 모르겠어요

답변1

차이점은 물리적 처리와 논리적 처리에 있습니다 ...

분명히 두 개의 별도 Downloads디렉토리가 있습니다.

  • 하나는/Users/ciprian/Downloads
  • 다른 하나는/Users/ciprian/Library/CloudStorage/OneDrive/Downloads

일부 셸(모든 POSIX 셸 포함 ) 에는 명령에서 이를 "사용자가 표현한 대로 정확하게 현재 경로를 가져오고 가장 오른쪽 요소를 잘라낸 후 결과 경로로 변경"으로 처리하는 bash옵션이 있습니다 . 심볼릭 링크를 사용하면 이는 논리적 "우리가 왔던 곳으로 돌아가는" 역할을 합니다. (심볼릭 링크 및 사용자가 호출한 )에서 다시 (따라서 이 시점의 새 경로는 ) 다음에서 로 돌아갑니다. 거기 . 이는 를 사용하면 얻게 되는 명시적인 동작입니다 ...cd/Users/ciprian/Library/CloudStorage/OneDrive/Documents~/Documents/Users/ciprian~/Users/ciprian/Downloadscd -L

다른 프로그램은 일반적으로 이 작업 을 수행하지 않습니다. 실제 경로를 따르기 때문에 디렉토리를 에서 로 변경하는 것은 ../Downloads항상 /Users/ciprian/Library/CloudStorage/OneDrive/Documents로 변경하는 것을 의미합니다 /Users/ciprian/Library/CloudStorage/OneDrive/Downloads.cd -P

셸의 이(버그가 있는) 기능이 마음에 들지 않으면 이를 비활성화하는 셸별 방법이 있을 수 있습니다. bash쉘 의 경우 또는 유사한 쉘 시작 스크립트 에 set -P또는 를 추가하면 명시적으로 사용되지 않는 한 모든 명령이 해당 옵션으로 작동합니다 .set -o physical~/.bashrcbashcd-P-L

노트. 문서는 Bash의 내부 명령이기 때문에 (SHELL BUILTIN COMMANDS 섹션) -P에 있습니다 .man bashcd

답변2

또 다른 가능성은 OneDrive와 관련이 있습니다.요청 시 파일그리고폴더 리디렉션옵션은 MacOS 및 Windows에서 사용할 수 있지만 비즈니스용 OneDrive로 제한될 수 있습니다.

두 옵션 모두 One Drive 지원 디렉터리 트리에서 폴더 및 파일의 로컬 복사본을 삭제하여 로컬 볼륨의 공간을 절약하는 기능을 제공합니다.

로컬 파일은 다음을 수행할 수 있습니다.수동One Drive 클라이언트에서 사용할 수 있는 "공간 지우기" 작업을 사용하여 삭제하세요. 하지만 위 기능 중 하나 또는 둘 다 사용하면 3개월 동안 액세스하지 않은 파일/폴더의 로컬 복사본이 삭제될 것이라고 생각합니다.

이러한 리소스의 클라우드 복사본에 대한 포인터는 유지되며 기본 파일 관리 응용 프로그램(예: Explorer/Finder) 또는 OneDrive 클라이언트를 사용하여 액세스할 때 OneDrive는 즉시 다운로드를 수행하여 로컬에서 사용할 수 있도록 합니다.

문제는 이것이 클라우드 포인터로만 존재하는 파일과 폴더를 나열하지만 파일 열기 또는 디렉터리 탐색과 같은 작업을 수행할 때 동기화를 트리거하지 않는 대부분의 *nix 셸에서는 작동하지 않는다는 것입니다. ).

이는 WSL의 bash 셸에서 비즈니스용 OneDrive 지원 디렉터리에 액세스할 때 자주 발생하는 문제입니다.

이러한 파일과 폴더는 로컬 장치로 다시 동기화되어야 합니다.앞으로쉘에서 처리해야 하거나 다음을 사용해야 합니다.항상 이 기기에 있음로컬에서 사용할 수 있고 공간을 최적화하기 위해 제거되지 않도록 하는 옵션입니다.

관련 정보