rm을 사용하여 파일과 디렉토리를 재귀 적으로 제거하십시오.


17

rm을 사용하여 다른 명령을 사용하지 않고 패턴과 일치하는 파일 및 디렉토리를 반복적으로 제거 할 수 있습니까?

답변:


35

귀하의 질문에 직접 대답하기 위해 "아니요-귀하가 설명하는 것을 할 수 없습니다 rm".

그러나와 결합하여 수행 있습니다find . 여러 가지 방법 중 하나를 수행 할 수 있습니다.

 # search for everything in this tree, search for the file pattern, pipe to rm
 find . | grep <pattern> | xargs rm

예를 들어, 모든 * ~ 파일을 압축하려면 다음과 같이하십시오.

 # the $ anchors the grep search to the last character on the line
 find . -type f | grep '~'$ | xargs rm

주석에서 확장하려면 * :

 # this will handle spaces of funky characters in file names
 find -type f -name '*~' -print0 | xargs -0 rm

1
true-마지막 파이프를 제외하면 모든 목록이 먼저 표시됩니다. :)
warren

2
포스터의 질문에 직접 대답 할 수는 없지만 원하는 것에 가장 가깝습니다.
Drakia

1
드워프, 아무 이유없이 조금 쓰라린가요?
Gnoupi

10
사용에 매우주의하십시오 find | grep | xargs rm. 공백 (또는 줄 바꿈)이있는 파일이있는 경우 파일 이름과 공백에 따라 삭제되어 의도하지 않은 내용이 삭제 될 수 있습니다. find … -print0 | xargs -0 rm훨씬 더 강력합니다. 그러나 원하는 파일 만 일치시키고 인쇄하려면 술어를 grep사용할 수 없으며 사용해야 find합니다. 워렌의 두 번째 예는보다 강력합니다 find -type f -name '*~' -print0 | xargs -0 rm.
Chris Johnsen

1
단일 명령으로 작업을 수행하려면 주어진 find 명령 중 하나를 사용하여 별명을 작성하십시오. 원하는 경우 나중에 이에 대한 답변을 작성합니다.
casualuser

8

"다른 명령을 사용하지 않고"

아니.


"초기 질문 (솔루션을 제공 할 수없는 위험이 있음)에 엄격하게 대답 함"과 "제한된 제한 사항과 엄격하게 일치하지 않더라도 솔루션 제공"토론을 설명하는 좋은 대답.
Gnoupi

나는 이것을 "A Dwarf"가 실제로 해결책을 제공 한 답변에 대해 불평하고 있다고 게시했습니다. 다른 명령을 사용하지 않으면 패턴과 일치하는 재귀 파일 삭제 를 수행 할 수있는 방법이 없으며 현재 디렉토리 파일 / 디렉토리 삭제 만 있습니다.
Drakia

3

Bash를 사용하여 yesglobstar설정하십시오 .

rm basedir/**/my*pattern*

일치하는 파일을 나열 ls -1하기 전에 먼저 예를 들어 시도하십시오 rm.

예를 들어 옵션을 설정 shopt -s globstar합니다.


또는 더 짧은 find변형 :

find -type f -name 'my*pattern*' -delete

또는 GNU의 경우 find:

find -type f -name 'my*pattern*' -exec rm {} +

또는 비 GNU에 대한 또 다른 대안 find(약간 느린) :

find -type f -name 'my*pattern*' -exec rm {} \;

요청에 따라 디렉토리를 제거하려면 위 명령에서 rm로 변경 하고 명령 rm -r에서만 일치를 건너 뛰십시오 .-type ffind


0

"rm -rf"라고 가정했을 것입니다. 파일 이름의 조합과 * 및? 등 (예 : todays_log_2009 ????. log). 현재 Dir에서 시작하여 해당 패턴에 해당하는 파일을 재귀 적으로 제거합니다.


패턴이 현재 디렉토리의 쉘에 의해 확장되기 때문에 작동하지 않습니다. 인용 된 패턴은 특수 문자가 포함 된 파일 이름이됩니다. 예를 들어 파일을 삭제하려면 rm '['을 쓸 수 있습니다. 패턴은 단순히 그 의미를 잃습니다.
casualuser

0

zsh (1) 을 사용하는 경우 setopt extendedglob.zshrc 에서 "확장 globbing"을 켜십시오 . 패턴 앞에 '** /'를 붙이면 재귀 적으로 삭제됩니다.

% rm -rf ** / <패턴>

이있는 경우 그러나, 많은 당신에 의존해야 삭제할 파일 (1)을 찾을 수xargs를 (1) 또는 간부가, 그리고 나 또한 일을하는 것이 좋습니다 쉘 스크립트에서 그.

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