각 하위 디렉터리의 고유 파일을 외부로 이동하고 이름을 디렉터리 이름으로 바꾸려면 어떻게 해야 합니까?

각 하위 디렉터리의 고유 파일을 외부로 이동하고 이름을 디렉터리 이름으로 바꾸려면 어떻게 해야 합니까?

나는 각각 파일을 포함하는 많은 수의 디렉토리를 가지고 있습니다. 구조는 다음과 같습니다.

.
├── 1.apple
│   └── foo.txt
├── 10.banana
│   └── foo.txt
├── 101.orange
│   └── foo.txt
├── <number>.<different strings>
│   └── <same strings>

이러한 개별 파일을 한 수준 위로 이동하고 현재 있는 하위 디렉터리의 이름을 반영하도록 이름을 바꾼 다음 해당 하위 디렉터리를 삭제하고 싶습니다. 결과는 다음과 같아야 합니다.

.
├── 1.apple.txt
├── 10.banana.txt
├── 101.orange.txt

정규식을 사용하면 작업을 수행할 수 있지만 awk작성 방법을 모르겠습니다.

답변1

명령 프롬프트에서 "한 줄짜리"로 입력할 수 있는 간단한 셸 루프를 사용하여 이 작업을 수행할 수 있습니다.

for d in */; do n="${d%/}".txt; mv "${d}foo.txt" "$n"; rmdir "$d"; done

이는 모든 하위 디렉터리(즉, 패턴과 일치하는 현재 디렉터리의 항목 */)에 대해 반복되며,

  • .txt후행 디렉터리 이름을 제거하는 프로세스에 추가하여 새 파일 이름을 생성합니다( ).$d/${d%/}
  • 디렉터리 내의 파일을 새 이름으로 현재 디렉터리로 이동합니다 $n.
  • $d마지막으로 현재 비어 있는 디렉토리를 삭제하십시오.

안전상의 이유로, 먼저 다음을 시도해 보세요.

for d in */; do n="${d%/}".txt; echo "mv ${d}foo.txt $n; rmdir $d"; done

이것은 단지인쇄실행될 명령을 반복하므로 오타나 기타 예상치 못한 동작이 있는 경우 수정할 수 있습니다.

관련 정보