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

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

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

관련 정보