이름이 특정 형식과 일치하는 모든 파일을 삭제하려는 경우 와일드 카드 (glob 패턴)가 가장 간단한 솔루션입니다. 몇 가지 예 :
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
정규식은 와일드 카드보다 강력합니다. 의 출력 grep
을 rm -f
. 파일 이름의 일부와 함께 시작하는 경우 예를 들어, "abc.log"
그리고 일부는 "ABC.log"
, grep
할 수 있습니다 당신은 대소 문자를 구분 일치를 수행합니다
$ rm -f $(ls | grep -i '^abc\.log\.')
파일 이름에 공백을 포함하여 재미있는 문자가 포함되어 있으면 문제가 발생합니다. 조심해.
이 작업을 수행 할 때 ls | grep ...
먼저 명령을 실행하고 원하는 출력을 생성하는지 확인합니다. 특히 다음을 사용하는 경우 rm -f
:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
여기서는 !!
이전 명령으로 확장됩니다. 또는 위쪽 화살표 또는 Ctrl-P를 입력하고 이전 줄을 편집하여 rm -f
명령 을 추가 할 수 있습니다 .
이것은 bash 셸을 사용하고 있다고 가정합니다. 일부 다른 쉘, 특히 csh 및 tcsh 및 일부 이전 sh 파생 쉘은 $(...)
구문을 지원하지 않을 수 있습니다 . 동등한 백틱 구문을 사용할 수 있습니다.
$ rm -f `ls | grep -i '^abc\.log\.'`
$(...)
구문은 읽기 쉽게, 그리고 당신이 정말로 야심이 있다면 그것은 중첩 될 수 있습니다.
마지막으로 삭제하려는 파일의 하위 집합을 정규식으로 쉽게 표현할 수없는 경우 자주 사용하는 트릭은 파일을 임시 텍스트 파일에 나열한 다음 편집하는 것입니다.
$ ls > list
$ vi list # Use your favorite text editor
그런 다음 list
파일을 수동으로 편집하고 제거 할 파일 만 남겨두고 다음을 수행 할 수 있습니다 .
$ rm -f $(<list)
또는
$ rm -f `cat list`
(다시 말하지만 이것은 파일 이름에 재미있는 문자, 특히 공백이 포함되어 있지 않다고 가정합니다.)
또는 list
파일을 편집 할 때 rm -f
각 줄의 시작 부분에 추가 한 다음 다음을 수행 할 수 있습니다 .
$ . ./list
또는
$ source ./list
파일을 편집하면 필요한 변경 예를 들어, 따옴표를 추가 할 수있는 기회 rm -f foo bar
에 rm -f 'foo bar'
.