파일에 어떤 순서로든 파일과 디렉터리 목록이 있고 이를 삭제하는 스크립트를 작성하고 싶습니다.
디렉토리는오직해당 하위 항목도 모두 삭제하려면 삭제해야 합니다.
(즉, 스크립트를 여러 번 실행한 후 비어 있는 경우에만 제거해야 합니다.)
저는 이 작업을 한 번에 하는 것을 정말 선호합니다.
그러나 이 작업을 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
중복 제거는비판적인결국 재귀적이라면 기하급수적인 시간 폭발을 방지할 수 있습니다.