나는 이 명령을 사용하여 디렉토리에서 쓸모없는 파일을 삭제하는 간단한 스크립트를 작성했습니다 find
.
이제 스크립트에 줄을 추가하여 디렉터리를 평면화할 수 있는지 알고 싶지만 그럴 수 없습니다.완전히으스러졌습니다.
예를 들어 다음과 같은 큰 디렉터리가 있는 경우 cleantarget
:
- 청소 대상
- 폴더 A
- 폴더 A1
- 폴더 A2
- 폴더 B
- 폴더 B1
- 폴더 B11
- 폴더 B1
- 폴더 A
최종 결과는 다음과 같습니다.
- 청소 대상
- 폴더 A
- 폴더 B
나는 결과가 다음과 같기를 원하지 않습니다.
- 청소 대상
- 내 모든 파일
디렉토리에는 16000개의 파일이 있으므로 디렉토리가 다시 복잡해질 때 가끔 실행할 수 있도록 스크립트를 사용하는 것이 가장 좋습니다.
어떻게 해야 하나요?
편집: 본질적으로 이는 다음을 의미합니다. 주어진 대상 디렉토리 내의 각 하위 디렉토리를 개별적으로 평면화하는 스크립트를 원합니다. 즉, 폴더 A를 평면화하고, 폴더 B를 평면화하고, 폴더 C를 평면화하는 방식으로 cleanfolder
그 안에 있는 모든 디렉터리가 평면화될 때까지 계속됩니다.
답변1
다음 줄이 작동해야 합니다.
find "/path/to/cleantarget" -maxdepth 1 -mindepth 1 -type d | while read line; do
find "${line}" -mindepth 2 -type f -exec mv -t "${line}" -i '{}' +
rm -r "${line}"/*/
done
이렇게 하면 폴더 A와 폴더 B가 병합되고 중복 항목을 덮어쓸지 묻는 메시지가 표시된 다음 폴더가 삭제됩니다.