내 에는 main_dir
많은 하위 폴더가 있고 DFT1
각 DFT150
디렉터리에는 이라는 폴더가 있습니다 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*
모든 파일에 대해 이름이 지정된 디렉터리를 검색합니다 .OSZICAR
c
find
그런 다음 파일이 발견된 디렉터리 이름(예: null 바이트로 종료)을 인쇄합니다.%h
DFT105
\0
- 이는 파이프를 통해
xargs
널바이트로 끝나는 줄을 읽고 각각을-0
호출합니다 .rm -r
xargs
모든 것이 제대로 작동하는지 확인하려면 항목을 삭제하기 전에 해당 부분 없이 명령을 호출하는 것이 좋습니다 .
편집하다:find
(OSX와 같은) 옵션을 수락하지 않으면 다음 -printf
을 사용하십시오.
find DFT*/OSZICAR -size -10c -exec sh -c 'rm -r $(dirname "$1")' sh {} \;