명령줄(또는 스크립트)을 사용하여 디렉터리 구조를 제거하는 방법

명령줄(또는 스크립트)을 사용하여 디렉터리 구조를 제거하는 방법

나는 수많은 폴더가 있는 2단계 디렉터리 구조에 많은 수의 파일을 압축했습니다.

즉, 내부에 많은 하위 폴더가 있는 폴더가 있습니다. 이러한 하위 폴더에는 하위 폴더가 없지만 그 안에 수백 개의 파일이 있습니다.

내가 하고 싶은 일은 이 하위 폴더의 모든 파일을 하위 폴더가 저장된 디렉터리로 이동하는 것입니다.

이것은 리소스가 제한된 시스템이므로 이러한 모든 파일의 두 복사본이 동시에 존재할 필요가 없다면 좋을 것입니다...

답변1

GNU 도구 사용:

cd that-dir &&
  find . -mindepth 2 ! -type d -exec mv -it . {} +

답변2

상위 디렉토리로 이동하여 실행하십시오.

mv -- */* .

( --이름이 로 시작하는 하위 디렉터리가 있는 경우에만 필요 -)

.(dotfile)로 시작하는 하위 디렉터리 또는 다음으로 시작하는 이름의 하위 디렉터리에 파일이 있는 경우 .:

mv -- */* */.[!.]* */..?* .
mv -- .[!.]*/* .[!.]*/.[!.]* .[!.]*/..?* .
mv -- ..?*/* ..?*/.[!.]* ..?*/..?* .

충돌이 없는지 확인하십시오. 그렇지 않으면 이동한 마지막 파일이 이전에 이동한 동일한 이름의 파일을 자동으로 덮어쓰게 됩니다. 충돌이 발생할 경우 메시지를 표시하려면 옵션을 (예: ) -i에 전달합니다.mvmv -i */* .

그런 다음 하위 디렉터리를 삭제할 수 있습니다.

rmdir */

명령줄이 너무 길다는 오류 메시지가 나타나면 여러 단계를 거쳐야 합니다. 가장 쉬운 방법은 find다음 명령을 사용하는 것입니다.

find */ -type f -exec mv -i {} . \;

또는 약간 더 빠릅니다.

find */ -type f -exec sh -c 'mv -i -- "$@" "$0"' . {} +

비임베디드 Linux 시스템에서는 훨씬 더 빠릅니다.

find . -mindepth 2 -type f -exec mv -it . {} +

관련 정보