한 디렉터리의 모든 파일과 폴더를 해당 하위 폴더 중 하나로 이동하고 싶습니다. 어떻게 해야 하나요?
BusyBox와 Linux를 사용하고 있습니다.
전:
모든 파일과 폴더를 /my/path/
다음으로 이동하세요./my/path/subfolder/.
복사 후 삭제 솔루션은 저렴하지 않습니다.
감사해요.
답변1
mv * subfolder
물론 "하위 폴더" 디렉터리를 자체 폴더로 이동하는 것은 실패하지만 다른 모든 디렉터리는 이동됩니다.
답변2
*
(셸로 확장)을 사용하는 솔루션은 /my/path/
. 그러한 경우 다음을 얻게 됩니다:
argument list too long
이 접근 방식은 다음을 사용하지 않습니다 *
.
cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +
불행하게도 -mindepth
및 -maxdepth
옵션은 find
POSIX와 호환되지 않습니다. 내 생각에는 두 -t
옵션 중 어느 쪽 mv
도 아니다.
이 변형은 POSIX를 충족해야 합니다.
cd /my/path/ &&
find . ! -name . -prune ! -name subfolder -exec mv {} subfolder/ \;
(적응했어요이 Unix 및 Linux SE 답변). 안타깝게도 mv
발견된 모든 개체를 요구하므로 속도가 느립니다.
디렉터리를 새로 만들 수 있는 경우에만 빠른 대안 접근 방식(처음에는 존재하지도 않고 /my/path/subfolder/
존재 /my/subfolder/
하지도 않아야 함):
path/
로 이름 바꾸기subfolder/
,- 재창조하다
path/
, subfolder/
로 이동합니다path/
.
inode 기반 파일 시스템에서는 .NET 파일에 개체 수에 관계없이 속도가 동일해야 합니다 path/
. 코드:
cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/
&&
이 경우에는 단계 중 하나라도 실패하면 절차를 중단해야 한다는 점을 강조하기 위해 많이 사용했습니다 . 그러나 이 접근 방식은 기본이 아닌 권한, 소유권 등이 필요 path/
하거나 필요한 경우 불편합니다.subfolder/
답변3
이를 수행하는 가장 간단한 방법은 다음과 같습니다.
mv !(subfolder) subfolder
'!' 프로그래밍 언어와 유사하게 NOT을 의미합니다. 여기서 mv는 하위 폴더를 제외한 모든 파일과 폴더를 필수 하위 폴더로 이동합니다.
숨겨진 폴더 및 도트 폴더 이동과 같은 추가 사항은 여기에 설명되어 있습니다.https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder
답변4
명령 을 확인하고 싶을 수도 있습니다 mv
. 디렉터리의 모든 파일과 폴더를 검색하고 하위 디렉터리를 제외시킨 다음 명령 find
과 함께 발견된 모든 파일을 해당 하위 디렉터리에 복사할 수 있습니다 mv
.
비슷한 스택 오버플로 질문을 참조하세요.https://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-Exception-those-in-a-특이적-directory