쉘 스크립트에서 `find` 작업 만들기

쉘 스크립트에서 `find` 작업 만들기

매우 간단한 작업이어야 하는 것처럼 보이지만 나는 충분히 하고 있지 않고 포럼에서 아무것도 찾을 수 없는 것 같아서 간단한 것을 간과하고 있는 것 같습니다.

find쉘 스크립트에서 실행 해 보았지만 아무 것도 수행되지 않았습니다.

예를 들어, 일부 파일이 포함된 폴더와 해당 파일이 포함된 여러 하위 디렉터리가 있습니다.

$ ls *
afile1.txt  anotherfile.py  findit.sh

subdir1:
morefiles1.txt  morefiles2.txt  morefiles3.txt  somescript.py

subdir2:
evenmorefiles1.txt  evenmorefiles2.py  evenmorefiles2.sh

find를 사용하여 주어진 검색 문자열로 모든 파일 이름을 추출하고(결국 파이프로 연결 xargs), 정확히 동일한 명령이 명령줄에서는 작동하지만 쉘 스크립트에서는 작동하지 않는 이유를 알 수 없는 것 같습니다.

$ cat findit.sh 
#!/bin/bash
echo $(which find)
echo "find . -name '"$1"' -print0"
find . -name '"$1"' -print0
echo "nothin??"
$ . findit.sh '*py'
/usr/bin/find
find . -name '*py' -print0
nothin??
$ find . -name '*py' -print0
./anotherfile.py./subdir2/evenmorefiles2.py./subdir1/somescript.py

이에 대한 도움을 주시면 감사하겠습니다...

답변1

큰따옴표로 인용하셨습니다 -name '"$1"'. 작은따옴표를 사용하기 때문에 문자열은 4자 리터럴입니다.큰따옴표 달러 첫 번째 큰따옴표.

그러나 큰따옴표와 작은따옴표를 바꾸더라도 -name "'$1'"문자열에는 여전히 작은따옴표가 있습니다. 따라서 그렇다면 $15 dog개의 문자열을 일치시키려는 것입니다 'dog'.

일치하는 파일을 찾고 있다면 *.py스크립트가 올바르게 설정된 것이지만 $1다음과 같은 표현식을 사용하고 싶습니다.

find . -name "$1" -print0

관련 정보