다음과 같은 디렉토리 구조가 있습니다.
├── Tom
│ └── c
│ └── 2
│ ├── file.jpg
│ └── text.txt
└── Sam
├── 1
│ └── c
│ └── music.aac
├── E
│ └── 9
│ └── pic.jpg
└── b
├── 9
│ └── sound.aac
└── d
└── book.doc
하나의 명령을 사용하여 다양한 하위 폴더의 모든 파일을 기본 상위 폴더(Tom, Sam 등)로 이동한 다음 빈 하위 폴더를 모두 삭제하고 싶습니다. 어떻게 해야 하나요?
감사해요
답변1
왜 단 하나의 라이너 여야했는지 잘 모르겠습니다. 하지만 가능성이 있습니다. 주어진 디렉토리 트리에서 모든 파일을 찾아 각 파일을 두 디렉토리 위로 이동합니다.
find -type f | while read; do mv "$REPLY" "$(dirname $REPLY)/../../"; done
이 명령은 주어진 디렉토리 구조에 완벽하게 작동하고 다른 경우를 고려하지 않으므로 주의해서 사용하십시오(예: 표시된 리프 디렉토리의 파일뿐만 아니라 모든 디렉토리에서 파일을 이동합니다).
답변2
어때요?
find Tom Sam -type f | while read FN; do echo mv "$FN" "${FN%%/*}"; done