따라서 하위 디렉터리가 여러 개 있는데 그 중 대부분은 파일이 1개만 있고 파일 이름은 하위 디렉터리 이름과 동일합니다.
DIR A
--DIR B
----B.zip
--DIR C
----C2.zip
----C3.zip
--DIR D
----D.zip
따라서 이상적인 결과는 다음과 같습니다.
- 둘 다
B.zip
그리고D.zip
다음으로 이동DIR A
DIR B
이제DIR D
비어 있으므로 삭제해야 하지만DIR C
2개 이상의 파일이 포함되어 있으므로 그대로 둡니다.
수행할 수 있는 작업이 있습니까? 아니면 특수 프로그래밍 코드를 작성해야 합니까?
감사해요
답변1
우리는 GNU find
디렉토리 트리를 탐색하면서 정보를 수집하는 유틸리티를 사용합니다. -깊이 옵션을 사용하면 find가 트리의 깊이 우선 순회를 수행하고 정확히 하나의 일반 파일을 저장하는 디렉토리의 이름을 얻게 됩니다. 그런 다음 파일을 abd tgen 위로 이동하고 방금 비운 디렉토리를 삭제합니다.
find . -depth ! -name . -type d -execdir \
sh -c '
isFileKnt_1() {
test "$(cd "$1" && find . -maxdepth 1 -type f | grep -c /)" -eq 1
}
for d do
t=$(mktemp -d)
isFileKnt_1 "$d" || exit 0
mv "$d"/* "$t"/.
rmdir "$d"
mv "$t"/* .
done
' find-sh {} +
tree -F는 작업 전후의 결과를 인쇄합니다.
.
├── dirB/
│ └── dirB
├── dirC/
│ ├── file_2
│ └── file_3
└── dirD/
└── dirD
.
├── dirB
├── dirC/
│ ├── file_2
│ └── file_3
└── dirD