Cygwin 환경에서 스크립트 실행

Cygwin 환경에서 스크립트 실행

나는 이 코드를 사용하고 있습니다 :

  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[@]}

첫 번째 명령은 zipfilesglob 과 일치하는 모든 파일/디렉토리의 배열을 생성합니다 *.plt.zip. 두 번째 줄은 배열의 요소 수를 인쇄합니다.

관련 정보