사용자 입력을 요청한 다음 해당 변수를 find 명령에 전달하는 bash 스크립트가 있습니다. 내가 아는 방법으로 변수를 인용/이스케이프 처리해 보았지만 항상 실패합니다.
read -p "Please enter the directory # to check: " MYDIR
count=`/usr/bin/find /path/to/$MYDIR -name *.txt -mmin -60 | wc -l`
if [ $count != 0 ]
then
echo "There have been $count txt files created in $MYDIR in the last hour"
else
echo "There have been no txt files created in the last hour in $MYDIR "
fi
실행하면 다음과 같은 결과가 나타납니다.
Please enter the directory # to check: temp_dir
/usr/bin/find: paths must precede expression
Usage: /usr/bin/find [-H] [-L] [-P] [path...] [expression]
There have been no txt files created in the last hour in temp_dir
답변1
-name
옵션에서 패턴을 인용해야 합니다.
count="$(/usr/bin/find /path/to/$MYDIR -name '*.txt' -mmin -60 | wc -l)"
따옴표를 사용하지 않으면 쉘이 패턴을 확장합니다. 귀하의 명령은 다음과 같습니다
/usr/bin/find "/path/to/$MYDIR" -name file1.txt file2.txt ... -mmin -60 | wc -l
.txt
이름이 to 옵션으로 끝나는 모든 파일을 제공합니다 -name
. 이로 인해 구문 오류가 발생합니다.