원격 스크립트에서 실행할 때 find가 작동하지 않습니다.

원격 스크립트에서 실행할 때 find가 작동하지 않습니다.

스크립트에 다음 줄이 있습니다.

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 ...없습니다 (두 번째 ).Templatesfind

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

관련 정보