
나는 이것이 매우 간단한 작업인 것처럼 보이기 때문에 간단한 것을 간과하고 있다고 생각합니다. 그러나 나는 부족하고 포럼에서 아무것도 찾을 수 없는 것 같습니다.
쉘 스크립트 내에서 실행하려고 하는데 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자입니다.큰따옴표 달러 1번 큰따옴표.
그러나 큰따옴표와 작은따옴표를 바꾸더라도 -name "'$1'"
문자열에는 여전히 작은따옴표가 있습니다. 따라서 5개의 문자열을 일치시키려고 할 것 $1
입니다 .dog
'dog'
일치하는 파일을 찾고 있다면 *.py
스크립트가 올바르게 설정되어 있지만 $1
다음과 같은 표현식을 사용하고 싶습니다.
find . -name "$1" -print0