빈 디렉토리가 제거되도록 올바른 순서로 디렉토리를 삭제하려면 어떻게 해야 합니까?

빈 디렉토리가 제거되도록 올바른 순서로 디렉토리를 삭제하려면 어떻게 해야 합니까?

파일에 어떤 순서로든 파일과 디렉터리 목록이 있고 이를 삭제하는 스크립트를 작성하고 싶습니다.

디렉토리는오직해당 하위 항목도 모두 삭제하려면 삭제해야 합니다.
(즉, 스크립트를 여러 번 실행한 후 비어 있는 경우에만 제거해야 합니다.)

저는 이 작업을 한 번에 하는 것을 정말 선호합니다.
그러나 이 작업을 1패스로 수행하려면 올바른 순서(후위 순회)로 작업을 수행해야 하는 것 같습니다.

제 생각에는 이것이 알려진 문제인 것 같습니다. 사람들은 일반적으로 쉘 스크립트에서 이 문제를 어떻게 해결합니까?

답변1

제 생각에는 이것이 알려진 문제인 것 같습니다. 사람들은 일반적으로 쉘 스크립트에서 이 문제를 어떻게 해결합니까?

파일 및 디렉터리 목록을 sort -r.

에서 파일 및 디렉터리 목록을 가져오는 경우 find-depth옵션을 사용하여 후순 순회를 보장할 수도 있습니다.

답변2

슬래시 수에 따라(내림차순) 파일을 정렬하면 정렬 문제를 해결할 수 있습니다.

답변3

상관없습니다. 제가 직접 해결했습니다.

완료하는 데 사용할 수 있습니다 awk. 이 솔루션은아니요파일 이름에 줄바꿈을 허용합니다.

awk -- '{a=$$0;b=$$0;print(gsub("/","/",a)-sub(/\/$$/,"aaa",b),$$0)}' INPUT_FILE.txt \
    |  "$(call Q2,/usr/bin/sort)" -k1,1nr \
    |  cut -d " " -f 2-

여기 있는 동안 다음을 사용하여 중복 행을 제거할 수 있습니다.

awk -- '{pos[$$0] = NR} END { for(key in pos) reverse[pos[key]] = key; for(nr=1;nr<=NR;nr++) if(nr in reverse) print reverse[nr] }' INPUT_FILE.txt

중복 제거는비판적인결국 재귀적이라면 기하급수적인 시간 폭발을 방지할 수 있습니다.

관련 정보