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