파일이 1개만 있는 하위 디렉터리를 검색하고 파일을 한 수준 위의 상위 디렉터리로 이동하는 방법

파일이 1개만 있는 하위 디렉터리를 검색하고 파일을 한 수준 위의 상위 디렉터리로 이동하는 방법

따라서 하위 디렉터리가 여러 개 있는데 그 중 대부분은 파일이 1개만 있고 파일 이름은 하위 디렉터리 이름과 동일합니다.

DIR A
--DIR B
----B.zip
--DIR C
----C2.zip
----C3.zip
--DIR D
----D.zip

따라서 이상적인 결과는 다음과 같습니다.

  1. 둘 다 B.zip그리고 D.zip다음으로 이동DIR A
  2. DIR B이제 DIR D비어 있으므로 삭제해야 하지만 DIR C2개 이상의 파일이 포함되어 있으므로 그대로 둡니다.

수행할 수 있는 작업이 있습니까? 아니면 특수 프로그래밍 코드를 작성해야 합니까?

감사해요

답변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

관련 정보