답변:
mv `ls | head -500` ./subfolder1/
-
또는 .
과 가정 subfolder1
이 목록에 표시되지 않습니다 자체.)
$ sudo mv `ls | head -50000` 01/ sudo: unable to execute /bin/mv: Argument list too long
로 zsh
:
mv -- *(D.oN[1,5000]) ./subfolder1
디렉토리에있는 순서대로 최대 5000 개의 일반 파일을 이동합니다.
사전 순으로 정렬 된 목록에서 첫 번째 5000의 경우 :
mv -- *(D.[1,5000]) ./subfolder1
당신에 대한 오류 얻을 경우 너무 긴 인수 목록을 . 다음 을 발행하여 zsh
의 buitin mv
명령을 사용할 수 있습니다 .
zmodload zsh/files
먼저.
POSIXly :
set --
for f in .* *; do
[ "$#" -lt 5000 ] || break
[ -f "$f" ] || continue
[ -L "$f" ] && continue
set -- "$@" "$f"
done
mv -- "$@" subfolder1/
단순하고 특수 문자, 공백 등을 지원하는 버전
ls -Q dir1 | head -1000 | xargs -i mv dir1/{} dir2/
이 작업을하는 것은있는 그대로 dir2
존재해야하며 당신의 부모 디렉토리에서 실행해야 dir1
하고 dir2
.
dir1에서 dir2로 1000 개의 파일이 이동합니다.
ls -Q -S dir1 | head -1000 | xargs -i mv dir1/{} dir2/
dir1에서 1000 개의 가장 큰 파일을 이동하는 경우 (-S는 파일을 크기별로 나열)
ls -Q
와 호환 출력 생성하지 않습니다 xargs
'의 예상 입력 형식을. 공백 문자를 포함하는 파일 이름에는 도움이되지만 큰 따옴표 나 백 슬래시에는 도움이되지 않으며 TAB을 포함한 제어 문자가 포함 된 파일 이름에는 해가되지 않습니다.
다음과 같이해야 할 수도 있습니다.
x=1
for file in *
do
if [ "X$x" = "X#####" ]; then
break
fi
mv $file <destination>
x=`expr $x + 1`
done
이 스크립트는 bash, ksh, sh 및 여러 UNIX 변형에서 작동합니다.
destination
가 포함되어 있지 않거나 -또는로 시작 하는 경우에는 해당 목록에 표시되지 않습니다.)
아래 명령을 실행
find . -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/
에서 find
명령, .
(점)은 현재 디렉토리를 의미한다
Hello로 시작하고 gz로 끝나는 파일을 찾습니다. 처음 5000 개의 파일이 경로로 이동합니다. /data01/path/