명령 행에서 특정 파일 삭제


8

fileName_1 , fileName_2 ... fileName_100000 파일이 있는데 여기서 fileNames는 순차적으로 번호가 매겨집니다. 100 보다 큰 색인 파일을 어떻게 삭제 합니까?

답변:


17

파일 이름이 순차적으로 번호가 매겨지면 다음 명령을 실행하십시오.

rm fileName_{100..100000}

3
정보 : 이것은 bash (쉘)가 {x..y}전체 목록으로 확장하기 때문에 작동 합니다. 예를 들어 사용 echo test{1..3}하면 확장되어 echo test1 test2 test3실행됩니다. 보다시피,이 인쇄 test1 test2 test3됩니다. 마찬가지로 {x..y}가 인수에 연결되어 있지 않으면 숫자를 넣습니다. 예를 들어 echo test {1..3}인쇄 test 1 2 3합니다.
Luc

1
참고 : exec프로세스가 가질 수있는 인수 수를 호출 하면 제한 이 있습니다. 로 검색 할 수 있습니다 getconf ARG_MAX. 예를 들어 내 시스템에서 2097152(~ 210 만)입니다. 이것은 rm(내장되지 않은) 많은 파일 이상으로 실패 한다는 것을 의미 합니다. 내장 명령에는이 문제가 없으며 다른 해결 방법도 제안되지 않습니다.
Bakuriu

ARG_MAX는 여러 인수가 아닌 바이트 수입니다. rm은 한 번에 2097152 파일 삭제를 처리 할 수 ​​없습니다. 각각 1023 바이트 길이의 이름을 가진 2048 개의 파일을 삭제할 수 있습니다 (1024는 아님; 인수 사이의 구분 기호 (C-land의 경우 0)는 한계에 포함됩니다).
godlygeek

6

이 명령을 시도해도됩니다

for i in $(seq 100 100000); do rm fileName_$i; done

파일 이름에 순차적으로 번호가 포함되어 있으면 모든 파일 (100 ~ 100000 범위)이 삭제됩니다.


5

일반적으로 몇 가지 방법으로이를 달성 할 수 있습니다.

rm fileName_{100..100000}

셸에서 대략 100,000 개의 파일 이름으로 확장됩니다. 기본 이름이 긴 경로이고 숫자가 충분히 높은 경우 실제로이 방법으로 명령 행의 최대 길이를 초과 할 수 있습니다.

for루프

for i in $(seq 100 100000); do rm fileName_$i; done

쉘이 변수 대체를 수행하고 rm을 약 10 만 번 실행해야하기 때문에이 문제점이 발생하지 않지만 파일을 삭제하는 비교적 느린 방법입니다.

예를 들어, 파일 중 일부 filename_101가 누락 된 경우 위의 두 가지 방법으로 경고가 발생할 수 있습니다 .

일반적으로 기반 솔루션 find은 실제로 발견 중에 파일에 대해서만 작동하므로 더 좋습니다. 그러나 약간의 차이점이 있습니다.

find . -name 'fileName_[100-100000]' -exec rm {} \;

여전히 실행됩니다 rm최종 교체하는 동안, 10 만 시간에 대해 프로그램 \;에 의한 것은 +서브 프로세스의 수를 최소화하려고합니다. 두 가지 방법 모두 -delete외부 명령을 전혀 사용하지 않고 대신 시스템 호출을 호출하는 사용 보다 느릴 것 입니다.

그러나 패턴이 실제로 대상 파일과 일치하는지 항상 먼저 확인하십시오.

stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]' 
askubuntu/filename_1

따라서이 경우 보관하려는 파일을 삭제하고 제거해야 할 파일을 남겼습니다.


4

다음 명령을 사용하십시오.

find . -name 'fileName_[100-100000]' -exec rm {} \;

100에서 100000 사이의 파일이 삭제됩니다.

추가 정보 : 사이트


사용 +하는 것보다 사용 하는 것이 좋습니다 . 여기를\; 참조 하십시오 . 또는 더 나은 방법은 find -delete명령을 사용하는 것 입니다.
evilsoup

이것을 테스트했으며 fileName_1 만 삭제했습니다. [100-100000] 문자 클래스는 단지 0 또는 1 일치 할 수 있습니다 만, 하나의 문자와 일치
deltab
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.