나는 이 코드를 사용하고 있습니다 :
numbzip=`ls *.plt.zip | wc -l` &>/dev/null
명령 창에서 출력을 삭제해 보세요.
.plt.zip으로 끝나는 파일이 없으므로 다음을 반환합니다.
ls: cannot access *.plt.zip: No such file or directory
내가 무엇을 시도하든 명령 창에는 항상 이 줄이 기록됩니다.
나는 시도했다:
numbzip=`ls *.plt.zip | wc -l` >/dev/null 2>/dev/null
numbzip=`ls *.plt.zip | wc -l` >/dev/null >>/dev/null 2>/dev/null
감사합니다, 윌코.
답변1
출력을 구문 분석하면 안 됩니다 ls
. 대신 찾기를 사용하세요
numbzip=$(find -iname "*.zip" | wc -l)
echo $numzip
답변2
잘못된 콘텐츠를 리디렉션하고 있기 때문에 이 메시지가 계속 표시됩니다.
numbzip=`ls *.plt.zip | wc -l` &>/dev/null
이는 명령의 stderr이 아닌 변수 할당의 stderr을 리디렉션합니다 ls
. ls
내부적으로 실행 하고 ``
외부로 리디렉션합니다. 오류 출력을 리디렉션하려면 다음을 ls
사용하세요.
numbzip=`ls *.plt.zip 2>/dev/null | wc -l`
즉, 위의 방법은 간단한 파일 이름에는 작동하지만 파일 이름에 개행 문자가 포함되어 있으면 실패합니다. 일반적으로 다음과 같이 해야 합니다.출력 구문 분석 방지ls
. 대신 셸 와일드카드를 사용할 수 있습니다.
zipfiles=( *.plt.zip )
echo ${#zipfiles[@]}
첫 번째 명령은 zipfiles
glob 과 일치하는 모든 파일/디렉토리의 배열을 생성합니다 *.plt.zip
. 두 번째 줄은 배열의 요소 수를 인쇄합니다.