하나의 명령(찾기)을 사용하여 여러 패턴의 파일 삭제

하나의 명령(찾기)을 사용하여 여러 패턴의 파일 삭제

find현재 디렉터리와 하위 디렉터리에서 서로 다른 패턴과 일치하는 파일을 (재귀적으로) 삭제하고 일치하는 파일을 인쇄하여 stdout어떤 파일이 삭제되었는지 확인하려고 합니다 .

예를 들어 '&'로 시작하는 모든 파일과 '$'로 시작하고 끝나는 모든 파일을 일치시키고 싶습니다.
나는 다음을 사용해 보았습니다.

find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;

하지만 rm마지막 일치('$*$')에만 적용됩니다.
따라서 나는 다음을 시도했습니다.

find . -type f -name '&*' -or -type f -name '$*$' -delete

하지만 이는 마지막 패턴만 일치할 뿐만 아니라 삭제된 파일도 출력하지 않습니다.
나는 이것을 할 수 있다는 것을 안다:

rm -v ``find -type f -name '&*' -or -type f -name '$*$'``

하지만 저는 이런 접근 방식을 피하고 명령을 통해 수행하고 싶습니다 find.

어떤 팁이 있나요?
미리 감사드립니다.

답변1

당신이 문제는 그게간부두 번째 패턴에만 적용됩니다. 검색 조건 주위에 괄호를 넣어서 문제를 해결해 보세요.

find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;

주목해야 할 점은 이것이 버그가 아니라 기능이므로 다음과 같이 할 수 있다는 것입니다.

find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'

당신이 필요하다면

답변2

그렇지만비행선대답이 맞습니다. 다음 해결책도 찾았습니다.

찾다 . -type f \( -name '&*' -또는 -name '$*$' \) -print -delete

관련 정보