파일과 디렉토리가 많은 디렉토리가 있습니다. 정리하기 위해 모든 파일을 디렉토리에 넣을 것이므로 다음과 같이 할 것입니다.
$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory
다음 이동하려고합니다 때문에 분명히 작동하지 않습니다 new_directory
에 new_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
설명
- 모든 파일을 나열하십시오.
- 모든 파일 이름을 최대 100000 자 청크로 묶습니다.
- 청크 당 단일 mv 명령을 구성하십시오.