Linux에서 find 명령을 사용하여 결과 집합에서 특정 파일을 삭제하려면 어떻게 해야 합니까?

Linux에서 find 명령을 사용하여 결과 집합에서 특정 파일을 삭제하려면 어떻게 해야 합니까?

확장자가 , 등인 모든 파일을 나열하는 다음 명령이 doc있습니다 docx.

find . -maxdepth 1 -iname \*.doc\*

이 명령은 삭제하고 싶은 수많은 파일을 반환합니다. 예를 들어 반환된 결과는 다음과 같습니다.

  1. 예.docx
  2. 더미데이터.doc
  3. 샘플.doc

Sample.doc와 Dummydata.docx를 삭제하고 싶습니다. 옵션 을 사용하여 파일을 어떻게 삭제합니까 -exec? 파일 이름을 전달할 수 있습니까? rm Dummydata.docx Sample.doc예를 들어 명령은 다음과 같습니다.

find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc

{} afterrm` 내에서 파일 이름을 전달할 수 있나요 ? 예를 들어

find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc

더 좋은 방법이 있나요?

답변1

파일 이름을 미리 알고 있다면 즉시 제거하는 것이 더 쉬울 것입니다.

find . -iname "Dummydata.doc" -delete

또는 여러 조건이 있는 경우:

find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)

괄호는 기본 설정을 강요하지만 일반적으로 괄호는 쉘에 특별한 의미를 갖기 때문에 이스케이프하거나 인용해야 합니다.


그렇지 않고 결과 목록을 먼저 검사하려면 찾은 파일의 경로(여기에 put into {})를 에 전달할 수 있습니다 sh. 명령 의 경우 sh경로는 가 되며 $0이를 제거하려는 파일 이름과 비교할 수 있습니다.

find . -maxdepth 1 -iname "*.doc" \
-exec sh -c 'if [ "$0" == "Dummydata.doc" ] || [ "$0" == "Sample.doc" ]; then echo rm "$0"; fi' {} \;

여기에서 echo올바른 파일이 제거될 것이라고 확신하면 제거하세요. 하지만 파일을 수동으로 제거하는 것이 더 쉬울 것 같습니다.

관련 정보