빈 파일과 헤더만 제거: [닫음]

빈 파일과 헤더만 제거: [닫음]

후속 질문에서어제 받은 질문:

Linux에서 스크립트를 실행하는 Datastage ETL 도구에서 다음 명령을 실행하고 있습니다.

나는 다음을 실행했다:

for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=0

이 경우 내 폴더에 빈 파일이 있습니다.

for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=1

내 폴더에 빈 파일이 없습니다.

둘 다 동일한 명령이지만 응답이 다릅니다. 응답 코드 1을 받으면 작업이 실패합니다.

답변1

0이 아닌 상태를 유지하려면 연산자 대신 명령문을 [[사용할 수 있습니다 .if&&

if [[ $(wc -l <"$file") -eq 1 ]]; then
  echo rm -- "$file"
fi

모든 행을 계산하는 대신 두 번째 행만 읽어야 할 수도 있습니다.

for file in /Path/filename_*; do
  [ -f "$file" ] || continue
  {
    read _
    read _ || echo rm -- "$file"
  } <"$file"
done

두 번째 줄이 read실패하면 POSIX에 따라 두 번째 줄이 없습니다.

관련 정보