모든 디렉터리를 동일한 폴더의 단일 디렉터리로 효율적으로 이동하려면 어떻게 해야 합니까?

모든 디렉터리를 동일한 폴더의 단일 디렉터리로 효율적으로 이동하려면 어떻게 해야 합니까?

"target"이라는 폴더를 포함하여 단일 폴더에 100개의 파일이 있습니다. 이 폴더의 모든 파일을 폴더 대상으로 마이그레이션하고 싶습니다(대상 폴더 자체 제외).

이를 수행하는 효율적인 터미널 명령이 있습니까?

답변1

디렉터리에 파일(및 디렉터리 대상)만 있는 경우 다음 mv대신 , 를 사용하면 됩니다 find.

mv * target

'target'은 자체적으로 이동할 수 없다고 불평하지만 파일은 나중에 모두 target에 있게 됩니다.

답변2

이것을 사용하십시오

$ mv target ..
$ mv * ../target
$ mv ../target .

답변3

이것은 또한 작동합니다:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

Bash 완성에 지나치게 의존 하는 주요 이점 중 하나 find는 숨겨진 파일을 동시에 얻을 수 있다는 것입니다. mv * ...그렇게하지 않을 것입니다.

아마도 다음과 같이 갈 수 있습니다.

mv -t target * .[^.]*

또는 James가 지적했듯이 find 명령을 줄여 파일만 볼 수 있습니다... 그리고 LoremIpsum이 지적했듯이 수십억 개의 파일이 있는 경우 다음을 사용하는 것이 xargs약간 더 효율적일 것입니다.

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target

답변4

대상 디렉터리를 이전 디렉터리로 이동한 다음 모든 것을 그 디렉터리로 이동하고 마지막으로 문제가 없으면 최종적으로 현재 디렉터리로 다시 이동하는 접근 방식입니다. 유일한 문제는 기록을 유지해야 하는 git 프로젝트 디렉토리에서는 작동하지 않는다는 것입니다.

따라서 git 디렉토리의 경우 다음과 같이 이동하십시오.자식 mv * 대상 -k

그만큼-케이옵션은 이동/이름 바꾸기 오류를 건너뛰는 데 사용됩니다.

관련 정보