스크립트에 다음 줄이 있습니다.
find ~ Templates -maxdepth 0 -type d -empty
예상대로 잘 작동합니다. 그러나 스크립트를 삼바 공유에 복사하고 거기에서 실행하면( bash myscript.sh
) find
디렉터리를 찾을 수 없습니다.
find: ‘Templates’: No such file or directory
$PATH 변수는 동일하며 strace에서 이유를 찾을 수 없습니다.
find가 왜 이렇게 동작하는지 아는 사람이 있나요? 이것은 버그입니까, 아니면 find
명령을 예상대로 사용하지 않습니까?
Ubuntu 19.10 및 bash 5.0 사용
답변1
find: ‘Templates’: No such file or directory
템플릿 하위 디렉터리가 없기 때문에 이 메시지를 받았습니다.
- 둘 중 하나 - 스크립트를 실행하는 순간부터
cd
또는 - 스크립트에 언급되지 않은 부분이 전환된 디렉토리
이것이 모두 오타인지, 무슨 뜻인지 궁금합니다 ~/Templates
. 어느 쪽이든 ~
스크립트에서 사용 하지 말고 를 사용 "$HOME"
하면 생성된 경로는 가 됩니다 "$HOME/Templates"
.
답변2
"아니요. 템플릿은 '~'에서 검색하는 디렉터리이거나 사용자의 홈 디렉터리이기 때문입니다."
find ~ -maxdepth 0 -type d -empty -name Templates
답변3
삼바가 리눅스와 동일한 환경 변수를 가지고 있다고 믿게 만드는 이유는 무엇입니까?
검색하려는 디렉토리에 대한 실제/전체 경로를 사용하십시오. 이는 ~
디렉토리가 아니므로 비어 있을 수 있습니다. 이것이 바로 find가 이를 검색 패턴( ) Templates
이 아닌 경로 로 취급하는 이유입니다.find: ‘Templates’: No such file or directory
삼바 디렉토리에서 쉘을 시작하고 그 내용을 볼 수 있습니까 $ pwd
? 다음 명령을 사용하여 전체 환경을 확인할 수도 있습니다 $ set
.
Samba 책 변수 사용 장홈 디렉토리가 가 %H
아니라고 말합니다 ~
.
소규모 실험:
$ ls -l | grep -E '^d' # to show there is 1 directory (tmp), which is not empty but doesnt have `Templates`
drwxr-xr-x 2 user group 24576 Mar 16 16:16 tmp
$ find Templates -maxdepth 0 -type d -empty # as if <path> (`~`) was empty
find: Templates: No such file or directory
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
find: Templates: No such file or directory
비어 있거나 ~
(첫 번째는 "빈" 경로) find ...
검색 경로에 없습니다(두 번째).Templates
find
$ touch Templates
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
$ rm Templates; mkdir Templates
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
Templates
만약에
템플릿은 "~" 또는 사용자의 홈 디렉터리에서 검색하는 디렉터리입니다.
그 다음에
$ find ~ -maxdepth 1 -type d -empty -name Templates
~/Templates
문제를 해결해야합니다.
-maxdepth 0
명령줄 매개변수에만 테스트와 작업을 적용합니다(다음에 따라).사람들이 발견했습니다;또한 확인하세요이 답변)