템플릿과 일치하는 파일을 찾아서 삭제하세요.

템플릿과 일치하는 파일을 찾아서 삭제하세요.

나는 수많은 폴더와 파일을 가지고 있습니다. 결국에는 파일을 구문 분석하고 확장자가 있는 파일만 찾아서 xmp삭제해야 합니다.

이를 달성하고 삭제된 파일의 이름을 추적하려면 어떻게 해야 합니까?

찾기: 사용할 수 있다는 것을 알고 있지만 find /path -name "*.xmp" 출력에서 ​​두 명령을 어떻게 실행합니까? 파일 경로와 이름을 유지 removelist.txt하고 삭제하세요.

답변1

GNU와 함께설립하다 -fprint그리고-delete행동:

find . -name "*.xmp" -fprint "removelist.txt" -delete
  • -fprint file- 전체 파일 이름을 file 에 인쇄합니다 file. file존재하지 않는 경우 런타임 시 생성되고 find, 존재하는 경우 잘립니다.
  • -delete- 파일 삭제

답변2

성공적으로 삭제된 파일을 기록하려면 다음을 수행할 수 있습니다.

find . -name '*.xmp' -exec rm -f {} \; -print > removed.txt

작업은 작업이 성공한 경우 -print에만 실행됩니다 (즉, 성공).-execrm

일부 구현에서는 각 파일에 대한 명령 실행을 방지하고 일부 경합 조건(원래는 FreeBSD 확장이지만 현재는 GNU 및 기타 일부 확장에서 지원됨)을 피하기 위해 findwith로 바꿀 수 있습니다 .-exec rm -f {} \;-deletefind

답변3

한 가지 방법은 다음을 사용하여 복합 쉘 명령을 실행하는 것입니다 -exec.

find /path -name '*.xmp' -exec sh -c 'echo "$1" >> removelist.txt && rm -f "$1"' sh {} \;

서브셸 내에서 echo(에 첨부된 removelist.txt) 둘 다 rm발견된 각 파일에 대해 실행됩니다.

참고: 마지막 매개변수는 sh를 사용하고 있기 때문입니다 -c. 이 플래그의 경우 뒤의 첫 번째 매개변수는 매개변수 0이거나 $0쉘의 이름이어야 합니다.

@RomanPerekhrest가 이 특별한 경우에 대해 더 나은 답변을 제공한다는 점을 인정해야 하지만, 여기 기술을 사용하면 find전용 플래그가 없을 수도 있는 모든 종류의 작업을 수행할 수 있습니다.:)

관련 정보