스크립트에 다음 줄이 있습니다.
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
명령줄 인수에만 테스트와 작업을 적용합니다(다음에 따라).남자 찾기; 또한 확인이 답변)