답변:
디렉토리를 제거 할 수없는 경우 언제든지 찾기를 사용할 수 있습니다.
find . -maxdepth 1 -type f -exec rm -f {} \;
현재 디렉토리의 모든 파일과 현재 디렉토리 (하위 디렉토리가 아닌) 만 삭제됩니다.
find dir/to/delete -delete
( rm
삭제할 파일 당 프로세스를 생성하지 않음 ).
find dir/to/delete -type f -delete
찾기 . -maxdepth 1-타입 f -exec rm -f {} \;
단순히 너무 오래 걸린다 (파일 당 rm의 1 개 exec).
이것은 훨씬 더 효율적입니다.
찾기 . -maxdepth 1 유형 f -print0 | xargs -r0 rm -f
가능한 한 rm에 대한 인수만큼 많은 파일 이름을 취한 다음 다음 파일 이름로드로 rm을 실행합니다 ... rm은 2 또는 3 번만 호출 될 수 있습니다.
ionice
직전에 추가 rm
하는 것이 좋습니다.
둘 다 문제를 해결할 것입니다. 여기에 각 기술의 각 성능에 대한 분석이 있습니다 .
find . -name WHATEVER -exec rm -rf {} \;
또는
ls WHATEVER | xargs rm -rf
문제는 디렉토리의 모든 항목과 함께 "*"를 확장하는 bash에서 비롯됩니다. 두 솔루션 모두 각 파일을 차례로 처리합니다.
find . -print0 | xargs -0 rm
).
ls *
"을 (를)하고 있으며 " *
"은 (는) 너무 긴 쉘이 불평하는 인수 목록으로 확장됩니다. ls .
대신 " "를 수행하십시오 (또는 하나의 디렉토리 레벨로 올라가서 " ls [dirname]
").
이 찾기 호출은 모두 훌륭하지만 서두를 때 필요한 명명법을 거의 기억하지 못합니다. 대신 ls를 사용합니다. 누군가 언급했듯이 ls. 작동하지만 ls -1을 선호합니다.
LS -1 | xargs -n 100 rm -rf
-n xxx 숫자는 최대 값을 초과하면 자동 수정되거나 (크기 최대 값을 초과 한 경우 -s 참조) 앱의 args-max를 초과하면 대체로 안전합니다. 분명한.
grep은 큰 디렉토리에서 파일의 서브 세트 만 삭제하고 어떤 이유로 든 find를 사용하지 않으려는 경우이 체인의 중간에 삽입하는 것이 편리합니다.
이 답변은 ls, xargs 등을 위해 Gnu 코어 유틸리티를 사용한다고 가정합니다.
시스템이 응답을 유지해야 할 때 많은 파일을 삭제하는 버전이 있습니다.
작은 배치 (기본적으로 100 개 파일)로 작업을 발행하고 다른 작업이 완료 될 때까지 약간 대기하여 작동합니다.
ext3의 단일 디렉토리에서 50 만 개가 넘는 파일을 삭제하기 위해 훌륭하게 작동했습니다. 약간의 보너스로 수행 한 비율을 인쇄합니다.
noOfFiles=`ls -U | wc -l`
n=0
while (ls -U | tail -n 100 | xargs rm -f); do
n=$((n+100));
sync;
echo -en "$((n*100/noOfFiles))%, ($n of $noOfFiles)\r";
sleep 5;
done
"인수가 너무 깁니다"또는 "메모리를 할당 할 수 없습니다"오류 해결
이것은 세션 폴더의 220,000+ 파일 에 대한 트릭을 수행 했습니다 ....
장점 : 즉시 파일 제거를 시작합니다
CD 경로 / 대상 / 폴더
LS -f | xargs rm -f -v
제거중인 파일의 스크린 샷을 보려면 클릭하십시오 - (~ 15 분 안에 모든 파일을 제거했습니다)
-f (ls 후) 가 미리 분류되지 않도록합니다.
-v (rm 이후) 는 각 파일이 제거 된 것으로 표시합니다.
쓰기 방지 된 파일에 대한 프롬프트없이 -f (rm 이후) 강제 실행
팁 : 파일을 삭제하는 동안 자동 생성 된 파일이 추가되지 않도록 폴더 이름을 바꿉니다 (예 : 세션을 session_old로) . 필자의 경우처럼 자동으로 원래 디렉토리가 아닌 경우 수동으로 원래 디렉토리를 다시 만들 수 있습니다