답변:
파일 이름이 순차적으로 번호가 매겨지면 다음 명령을 실행하십시오.
rm fileName_{100..100000}
exec프로세스가 가질 수있는 인수 수를 호출 하면 제한 이 있습니다. 로 검색 할 수 있습니다 getconf ARG_MAX. 예를 들어 내 시스템에서 2097152(~ 210 만)입니다. 이것은 rm(내장되지 않은) 많은 파일 이상으로 실패 한다는 것을 의미 합니다. 내장 명령에는이 문제가 없으며 다른 해결 방법도 제안되지 않습니다.
일반적으로 몇 가지 방법으로이를 달성 할 수 있습니다.
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
따라서이 경우 보관하려는 파일을 삭제하고 제거해야 할 파일을 남겼습니다.
다음 명령을 사용하십시오.
find . -name 'fileName_[100-100000]' -exec rm {} \;
100에서 100000 사이의 파일이 삭제됩니다.
추가 정보 : 사이트
{x..y}전체 목록으로 확장하기 때문에 작동 합니다. 예를 들어 사용echo test{1..3}하면 확장되어echo test1 test2 test3실행됩니다. 보다시피,이 인쇄test1 test2 test3됩니다. 마찬가지로{x..y}가 인수에 연결되어 있지 않으면 숫자를 넣습니다. 예를 들어echo test {1..3}인쇄test 1 2 3합니다.