디렉토리의 모든 파일을 해당 디렉토리로 이동하는 배쉬 스 니펫 정리하기 위해 모든

파일과 디렉토리가 많은 디렉토리가 있습니다. 정리하기 위해 모든 파일을 디렉토리에 넣을 것이므로 다음과 같이 할 것입니다.

$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory

다음 이동하려고합니다 때문에 분명히 작동하지 않습니다 new_directorynew_directory. 해당 디렉토리의 모든 파일과 디렉토리를 복사하여 붙여 넣을 필요없이 한 줄로 원하는 것을 수행하는 간단한 방법이 있습니까?



답변

너의

mv * ./new_directory

명령은 실제로 작동합니다. 해당 디렉토리를 그 자체로 이동할 수 없다는 경고를 인쇄합니다.


답변

빠르고 더러운 oneliner.

mv `ls -A | grep -v new_directory` ./new_directory


답변

디렉토리 만 아닌 파일 만 찾고 있다면

find . -type f -maxdepth 1 -exec mv {} ./new_directory/ \;

가장 휴대용 솔루션입니다. 속도를 높이려면 find와 xargs를 -print0과 -0과 함께 이동해야하지만 GNU find와 xargs가있는 경우에만 가능합니다.


답변

이 문제가 발생한 시간은 다음 중 하나를 수행했습니다.

$ mkdir ../new-directory
$ mv * ../new-directory/
$ mv ../new-directory .

또는

$ mkdir .new-directory
$ mv * .new-directory/
$ mv .new-directory new-directory

두 번째 형식은 ‘.’로 시작하는 와일드 카드 생략 파일 이름을 활용합니다.


답변

는 어때:

cd ..
mv old_dir new_directory
mkdir old_dir
mv new_directory old_dir

IOW, 내용을 새 디렉토리로 옮기지 말고이 디렉토리를 새 디렉토리에 넣으십시오.


답변

@ Rembrane 의 답변 과 비슷한 방식으로 (하나의 라이너는 아니지만) :

for FN in *
do
    if [ "<new_dir>" != $FN ] then
        mv $FN <new_dir>
done

find슬프게도 시스템에없는 경우에도 100 % 휴대 가능 해야합니다.


답변

내 제안 : 다른 사람들이 언급했듯이

mv * ./new_directory

IFF는 전체 확장이 충분히 짧다는 것을 알게됩니다.

다른 방법으로는 훨씬 더 많은 수의 파일로 확장되는이 방법을 시도 할 수 있습니다.

find . -type f -maxdepth 1 | xargs -s100000 echo | xargs -iXXX mv XXX new_directory

설명

  1. 모든 파일을 나열하십시오.
  2. 모든 파일 이름을 최대 100000 자 청크로 묶습니다.
  3. 청크 당 단일 mv 명령을 구성하십시오.