Bash 쉘 스크립트에서 glob과 함께 find를 사용하는 방법은 무엇입니까? [폐쇄]

Bash 쉘 스크립트에서 glob과 함께 find를 사용하는 방법은 무엇입니까? [폐쇄]

나는 find사용하려고구체Bash 쉘 스크립트에서. 그것을 가져와서 실행해 보았지만 명령이 매번 실패합니다.

#!/usr/bin/env bash
# glob-test.sh - a script to test globs in find
cd /to/a/windows/share-point
find ./**/*Some/*Place/**/ -iname "*.pdf"

# How about using foreign characters?
find ./**/*Söme/*Pläce/**/ -iname "*.pdf"
  • bash 명령 줄에서 작동합니다.
  • 저는 다양한 인용 방법을 시도해 보았습니다.
  • 나는 열심히 노력했다구입그리고구현하다스크립트.
  • 켰다 껐다 해봤어요글로벌 스타스크립트 내부와 외부 모두에서 쉘 옵션이 작동하지만 여전히 작동하지 않습니다. ( shopt -s/u globstar)

문제는 무엇이고 어떻게 해결하나요?

답변1

이 문제에는 두 가지 측면이 있는 것 같습니다.

  • Windows 공유 포인트에서 이 작업을 수행하는 경우구입그것은 find돌아온다매우느리게,첫 번째시간. 하지만 훨씬 더 빠르다두번째시간. 그럼에도 불구하고 일종의 버퍼링/캐싱이 진행 중이어야 합니다. 따라서 사용자는 명령이 실패했거나 차단되었다고 생각합니다. 실행 중에는 그렇지 않습니다. 조달은 현재 셸에서 실행되므로 globstar활성화해야 할 수도 있습니다. 스크립트로 실행하면 이 문제가 없는 것 같고,글로벌 스타환경.

  • 위의 결과는 어떻게 든 문자 집합도 혼란스러워진다는 것입니다찾다스크립트와 소스 코드 런타임으로 실행합니다. sourced를 실행하면 올바른 터미널 로케일 문자 세트가 사용되는 반면, 스크립팅 시에는 기본/운영 체제 AFAICT 문자 세트가 사용됩니다. (저는 3개 언어로 작업합니다.)

OP에서 내가 몰랐거나 몰랐던 점은 /*Some/*Place/해당 부분에서 다른 언어 문자(발음 부호 포함)를 사용했다는 것입니다. 나는 그것이 중요하다고 생각하지 않지만 명령이 실패하게 만듭니다. 2바이트 UTF-8 문자를 비밀리에 검색하여 하나만 올바르게 표시하기 때문입니다.

배쉬 후드 아래에서 무슨 일이 일어나고 있는지 완전히 확신할 수는 없지만, 캐릭터 세트를 만지작거리고 인내심을 갖고 결과를 기다리면 예상대로 작동하게 되었습니다. 더 좋고 명확한 답변을 게시해 주시기 바랍니다.

관련 정보