파일 크기를 감지하고 조건부로 작업을 수행합니다.

파일 크기를 감지하고 조건부로 작업을 수행합니다.

내 에는 main_dir많은 하위 폴더가 있고 DFT1DFT150디렉터리에는 이라는 폴더가 있습니다 OSZICAR. 그러나 그 중 일부 파일의 크기는 0입니다.

그래서 각 폴더에 들어가서 크기를 확인하고 OSZICAR크기가 10바이트 미만이면 해당 DFT폴더를 삭제하는 스크립트를 원합니다.

작동하지 않는 내 의사 코드는 다음과 같습니다.

for f in *; do
 cd $f
 status=(check whether OZICAR has size below 10bytes)
 cd ..
 if (status); do
  rm -r $f
 fi 
done

답변1

사용 find:

find DFT*/OSZICAR -size -10c -printf "%h\0" | xargs -r0 rm -r
  • find파일 크기가 10바이트 미만인 DFT*모든 파일에 대해 이름이 지정된 디렉터리를 검색합니다 .OSZICARc
  • find그런 다음 파일이 발견된 디렉터리 이름(예: null 바이트로 종료)을 인쇄합니다.%hDFT105\0
  • 이는 파이프를 통해 xargs널바이트로 끝나는 줄을 읽고 각각을 -0호출합니다 .rm -r

xargs모든 것이 제대로 작동하는지 확인하려면 항목을 삭제하기 전에 해당 부분 없이 명령을 호출하는 것이 좋습니다 .

편집하다:find(OSX와 같은) 옵션을 수락하지 않으면 다음 -printf을 사용하십시오.

find DFT*/OSZICAR -size -10c -exec sh -c 'rm -r $(dirname "$1")' sh {} \;

관련 정보