나는 수많은 폴더가 있는 2단계 디렉터리 구조에 많은 수의 파일을 압축했습니다.
즉, 내부에 많은 하위 폴더가 있는 폴더가 있습니다. 이러한 하위 폴더에는 하위 폴더가 없지만 그 안에 수백 개의 파일이 있습니다.
내가 하고 싶은 일은 이 하위 폴더의 모든 파일을 하위 폴더가 저장된 디렉터리로 이동하는 것입니다.
이것은 리소스가 제한된 시스템이므로 이러한 모든 파일의 두 복사본이 동시에 존재할 필요가 없다면 좋을 것입니다...
답변1
GNU 도구 사용:
cd that-dir &&
find . -mindepth 2 ! -type d -exec mv -it . {} +
답변2
상위 디렉토리로 이동하여 실행하십시오.
mv -- */* .
( --
이름이 로 시작하는 하위 디렉터리가 있는 경우에만 필요 -
)
.
(dotfile)로 시작하는 하위 디렉터리 또는 다음으로 시작하는 이름의 하위 디렉터리에 파일이 있는 경우 .
:
mv -- */* */.[!.]* */..?* .
mv -- .[!.]*/* .[!.]*/.[!.]* .[!.]*/..?* .
mv -- ..?*/* ..?*/.[!.]* ..?*/..?* .
충돌이 없는지 확인하십시오. 그렇지 않으면 이동한 마지막 파일이 이전에 이동한 동일한 이름의 파일을 자동으로 덮어쓰게 됩니다. 충돌이 발생할 경우 메시지를 표시하려면 옵션을 (예: ) -i
에 전달합니다.mv
mv -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 . {} +