나는 수많은 폴더와 파일을 가지고 있습니다. 결국에는 파일을 구문 분석하고 확장자가 있는 파일만 찾아서 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
에만 실행됩니다 (즉, 성공).-exec
rm
일부 구현에서는 각 파일에 대한 명령 실행을 방지하고 일부 경합 조건(원래는 FreeBSD 확장이지만 현재는 GNU 및 기타 일부 확장에서 지원됨)을 피하기 위해 find
with로 바꿀 수 있습니다 .-exec rm -f {} \;
-delete
find
답변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
전용 플래그가 없을 수도 있는 모든 종류의 작업을 수행할 수 있습니다.:)