이름과 확장자 유형을 기준으로 파일을 비교하고 삭제하는 스크립트

이름과 확장자 유형을 기준으로 파일을 비교하고 삭제하는 스크립트

내 프로그램은 이름은 같지만 확장자가 다른 두 개의 파일을 생성합니다(예: 20162012.dat 및 20162012.cnf). 때때로 프로그램이 .dat 파일을 생성하지 못하는 경우가 있습니다. 따라서 다른 .cnf 파일은 고아 파일이 됩니다. 이 파일을 비교하고 파트너 .dat 파일이 없는 고아 .cnf 파일을 제거하는 스크립트를 찾고 있습니다.

모든 스크립트와 제안 .. 도와주세요.

아래 방법을 시도했지만 오류가 발생했습니다. 뭔가 누락된 것일 수도 있습니다. 수정해주세요.

스크립트:

for f in *.cnf
do
    [ -e "$f" ] || continue
    f="${f%%.cnf}"
    [ -e "$f".dat ] || rm -i -- "$f".cut
done

실수:

rm: cannot remove `20162010.cut': No such file or directory

참고: 비교 및 ​​삭제를 위해 스크립트와 파일을 동일한 폴더에 넣었습니다.

감사해요!

답변1

하다:

for f in *.cnf; do [[ -f ${f%.*}.dat ]] || echo "$f"; done

이것은 리허설이므로 실제 연습 echo으로 대체합니다.rm

  • for f in *.cnf반복 .cnf파일

  • [[ -f ${f%.*}.dat ]].dat관련 파일이 있는지 확인

  • 그렇지 않은 경우( ||) 파일을 인쇄(또는 삭제)합니다.

관련 정보