find를 사용하여 *.py~ 및 *.pyc 파일을 한 번에 삭제하는 방법은 무엇입니까?

find를 사용하여 *.py~ 및 *.pyc 파일을 한 번에 삭제하는 방법은 무엇입니까?

.py및 파일이 발생할 때마다 .pyc디렉터리(및 하위 디렉터리)를 정리 하고 싶습니다 . 나는 다음을 시도했다

find . -name '*pyc' -o -name '*py~' -exec rm -f {} \;

모든 파일이 누락되었습니다 pyc. 할 때

find . -name '*pyc' -o -name '*py~'

pyc이 명령은 삭제되지 않은 파일을 찾습니다 . 어떤 통찰력이 있습니까?

답변1

와일드카드 패턴을 사용 하는 대신 와일드카드 패턴을 사용하면 안 되는 이유는 무엇입니까 -o?

find . -name '*py[c~]' -delete

또는:

find . -name '*py[c~]' -exec rm -f {} +

답변2

연산자 -a(두 조건자 사이에 암시적)가 우선하므로 -o괄호가 필요합니다.

find . \( -name '*pyc' -o -name '*py~' \) -a -exec rm -f {} +

(위의 내용은 데모 목적으로만 포함시켰으며 -a암시적이므로 필요하지 않습니다.) 피할 수 있다면 각 파일마다 하나씩 실행할 필요가 없기 ;때문에 교체했습니다 .+rm

답변3

bash 4+를 사용하는 경우 globstar가 재귀 와일드카드를 제공하므로 find가 필요하지 않습니다.

shopt -s globstar
for f in ./**/*.py{c,~}; do rm "$f"; done

이는 shopta로 구분되지 않고 자체 라인에 있어야 합니다 ;(가능한 경우 스크립트 맨 위, shebang 바로 아래에서 사용해야 합니다).

답변4

나는 이 질문이 그다지 새로운 것이 아니라는 것을 알고 있습니다. 하지만 아마도 사용하기에 충분할 것입니다.

rm -f `find . -name '*.pyc' -o -name '*.py~' `

관련 정보