매우 간단한 작업이어야 하는 것처럼 보이지만 나는 충분히 하고 있지 않고 포럼에서 아무것도 찾을 수 없는 것 같아서 간단한 것을 간과하고 있는 것 같습니다.
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'"
문자열에는 여전히 작은따옴표가 있습니다. 따라서 그렇다면 $1
5 dog
개의 문자열을 일치시키려는 것입니다 'dog'
.
일치하는 파일을 찾고 있다면 *.py
스크립트가 올바르게 설정된 것이지만 $1
다음과 같은 표현식을 사용하고 싶습니다.
find . -name "$1" -print0