스크립트가 있는데 파일이 존재하는지 여부에 따라 다른 메시지를 표시하고 싶습니다. 나는 다음과 같은 스크립트를 가지고있다 :
count=ls /import/*.zip | wc -l
echo "Number of files: " $count
if [ "$count" > "0" ]; then
echo "Import $count files"
else
echo "**** No files found ****"
fi
그러나 파일이 없으면 No such file or directory
0 파일 대신 표시 됩니다. 디렉토리에 /import/
디렉토리가 있으므로 ls
항상 0보다 큰 값을 반환하므로 명령을 수행 할 수 없습니다 .
특정 확장명 (.zip, .gz 등)의 파일 수를 계산하고 bash 스크립트에서 해당 값을 사용하여 파일 수를 표시 한 다음 if 문에서 사용하여 다른 메시지를 표시하려면 어떻게해야합니까?
답변
count=$(find /import -maxdepth 1 -name '*.zip' | wc -l)
답변
이것으로 시도하십시오 :
count=$(find /import/ -maxdepth 1 -type f -name '*.zip' | wc -l)
...
if [ $count -gt 0 ] ; then
...
else
...
fi
아이디어는 비트 버킷으로 전송하여 STDERR에 인쇄되는 “파일 없음”오류를 숨기고 숫자를 비교하기 위해 적절한 테스트 기능을 사용하는 것입니다. ( -gt
“이상”을 의미합니다.도 있습니다 -eq
, -lt
, -ge
, 등)
답변
스크립트를 시도했지만 예상대로 일치하는 파일이 없으면 출력에 0 개의 파일 이 표시되지만 ls
직전 에 오류가 표시 됩니다. 이것을 해결하는 것은 매우 쉽습니다 ls
. 도랑 할 필요가 없습니다 . 첫 번째 줄을 다음과 같이 바꾸십시오.
count=$(ls /import/*.zip 2>/dev/null| wc -l)
2>/dev/null
/dev/null
오류 메시지를 표시하지 않고 stderr을로 리디렉션 합니다.