패턴과 일치하는 모든 파일을 제거하려면 어떻게합니까?


76

Mercurial에서 복귀하면 몇 개의 .orig파일 이 남습니다 . 명령을 실행하여 모든 명령을 제거하고 싶습니다.

나는 다음과 같은 소스를 발견했다.

rm **/*.orig

그러나 그것은 나에게 메시지를줍니다 :

rm :`* / .orig '를 제거 할 수 없습니다 : 그러한 파일이나 디렉토리가 없습니다

나는 또한 시도했다 :

  • rm -rv *.orig

  • rm -R *\.orig


답변:


148

find명령을 사용하십시오 (주의!)

find . -name '*.orig' #-delete

삭제 명령을 주석 처리했지만 일치하는 항목에 만족 #하면 줄에서를 제거하면 해당 파일이 모두 삭제됩니다.


재귀 적으로 작동합니까?
Frank Barcenas

2
@FrankBarcenas 그래-모든 것을 재귀 적으로 찾습니다. 작동 방식을 제한하려면 -maxdepth또는 -mindepth인수를 사용하여 재생할 수 있습니다 .
Oli

6
플래그 -delete끝에 반드시 그대로 두십시오 . find . -delete -name '*.orig'필터를 무시하고 전체 디렉토리를 방해합니다.
Michael

1
@ 마이클, 예. 나는 이미 문제를 해결했다git clean -fdx
kyb

1
@kamal 아마 여전히 찾을 수 있지만 함께 사용하는 것 -regex또는 -iregex술어. 파일 이름을 구문 분석하는 경우 (파일을 파이핑 할 때) 때로는 안전하게 수행하기 어려울 수 있습니다.
Oli

6

"find"에는 모든 또는 현재 디렉토리와 rm 파일을 검색하는 고급 기술이 있습니다.

find ./ -name ".orig" -exec rm -rf {} \;

3
를 사용하면 어떤 이점이 -delete있습니까?
muru December

@muru -rf를 제거하면 각 파일에 대한 프롬프트가 표시됩니다.
Peter

@Peter는 아닙니다. 그래도 그래? 대답은를 사용 -rf하고 find있습니다 -ok.
muru

@muru 그것은 -delete 폴더를 제거하지 않는 것 같습니다
Andrii Karaivanskyi

삭제가 실패하지 않으면 @AndriiKaraivanskyi가 실패합니다.
muru

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.