rmdir을 사용하여 폴더 내의 많은 빈 폴더를 삭제하십시오.


1

언제든지 폴더가 500k 미만이어야합니다. 이러한 폴더는 동적으로 생성되며 그 안에있는 파일 (이미지)이 일부 스크립트에 의해 삭제되면 폴더 자체도 삭제해야합니다. 버그로 인해 빈 폴더가 삭제되지 않았으며 이제는 수백만 개의 빈 폴더가 생겼습니다.

그래서 현재 파일에 약 500k 개의 폴더가 있으며 그 외에도 수백만 개의 빈 폴더가 있습니다.

거기에 너무 많은 dirs가 있기 때문에 간단한 ls | wc -l은 몇 시간이 걸리므로 정확한 숫자조차 찾을 수 없습니다.

find 명령을 실행할 수 있습니다 : find. -최대 깊이 1-형 d-빈; 그런 다음 rmdir로 파이프하십시오. 그러나 다시 찾기에는 시간이 걸립니다 (또는 오퍼를 찾는 -delete 옵션 사용).

그런 다음 rmdir --ignore-fail-on-non-empty / path / to / huge / folder / *; 그러나 그 효율성에 대해서는 확신하지 못합니다. 기본적으로이 명령은 내 폴더의 빈 디렉토리 만 삭제하므로 파일이있는 디렉토리는 안전하고 삭제되지 않아야합니다. 그런 다음 '---- 무시 실패시 무시'옵션은 실제로 비어 있지 않은 디어에 대한 수십만 또는 경고를 무시합니다.

로컬에 약 100k 개의 빈 폴더를 빠르게 만든 다음 그중 일부 파일을 '만져'rmrm 명령을 사용했습니다. 100k 개의 빈 폴더를 만드는 데 2 ​​분이 걸렸지 만 빈 폴더를 삭제하는 데 2 ​​초 (!)가 걸렸습니다. 내 희망은 높지만 약 1 천만 개의 폴더를 처리하는 방법을 잘 모르겠습니다 ...

누구든지 아이디어 / 조언이 있거나 전에 이와 같은 문제에 직면 한 경우 내 문제에 접근하는 가장 좋은 방법을 알려주십시오. 또는 어떤 방법이 더 나은지 말해보십시오 : find 또는 rmdir ...

편집 : 전에 폴더 구조를 언급하는 것을 잊었습니다. 파일이 들어있는 기본 폴더 내의 폴더에는 더 이상 폴더가 없습니다. 다른 폴더가 비어 있습니다. 따라서 수백만 개의 폴더 캠이 모두 비어 있거나 파일이 있지만 더 이상 폴더가 없습니다. 기본적으로 트리 구조에는 하나의 폴더 레벨 만 있습니다.


이것이 얼마나 많은 디렉토리입니까?
유타 Jarhead

UtahJarhead의 질문과 관련하여 디렉토리 구조가 너무 깊어지고 그렇지 않은 경우에도 작업을 여러 조각으로 나누는 것이 더 편하다고 느끼더라도 rmdir 명령을 절반 또는 2/3로 시작할 수 있습니다 디렉토리 트리.
panhandel

답변 주셔서 감사합니다. 폴더 구조로 질문을 업데이트했습니다.
티티

답변:


0

실제로 얼마나 많은 디렉토리가 있는지 알지 못하면 어떤 접근 방식이 작동하는지 예측하기 어렵지만 다음과 같이 말할 수 있습니다.

find . -maxdepth 1 -type d -empty -delete

A는 아주 나쁜 생각. 찾기 는 물건을 삭제할 때 엄청나게 느립니다. 내가 벤치마킹 한 시간, -delete스위치는 최적의 접근법보다 40 ~ 50 배 느 렸습니다.

마찬가지로,

rmdir --ignore-fail-on-non-empty /path/to/huge/folder/*

차선책이어야합니다. 쉘은 glob를 모든 디렉토리 항목 (파일 및 폴더)으로 확장하고, rmdir로 전달하기 전에 알파벳순으로 정렬하므로 시간이 걸리고 완전히 불필요합니다.

결합 된 접근 방식이 가장 좋습니다.

find . -maxdepth 1 -type d -empty -exec rmdir {} +

끝에있는 더하기 부호는 모든 단일 디렉토리에 대해 rmdir 을 호출하지 않도록 합니다. 대신 find 는 128 KiB (명령 줄 인수에 대한 커널 제한 때문에)에 맞는 수의 디렉토리 이름을 수집하고 모든 디렉토리에 대해 rmdir 을 한 번에 실행합니다.

위의 ionice 와 결합하면 아프지 않았습니다. 몇 백만 개의 디렉토리가 "만"있다면 그것이 필요한지 의심 스럽다. 그러나 정확한 숫자를 모르기 때문에 죄송합니다.


유용한 명령에 감사드립니다. 현재 실행 중이며 10 분마다 평균 약 10k 개의 빈 폴더를 삭제합니다. 다행스럽게도 빈 디렉토리의 수를 잘못 계산했으며 주 폴더에 1 백만 개가 넘는 폴더 만있었습니다 (1 천만 아님). 지금 나는 단지 대기 게임을해야한다 ...
Titi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.