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