첫 x 파일을 이동하는 방법


21

정렬되지 않은 수천 개의 파일이있는이 거대한 폴더가 있습니다. mv명령을 통해 처음 5000을 하위 폴더로 옮길 수 있습니까? 지금은

 mv *some_pattern* ./subfolder1/

지금은 이미지를 임의로 무작위로 옮깁니다. 각 하위 폴더에 정확히 5000 개의 파일이 없으면 중요하지 않습니다. 더 좋은 방법이 있습니까?


답변:


23
mv `ls | head -500` ./subfolder1/

12
(파일 이름의 가정 아무도 공백, 탭, 줄 바꿈, 스타, 개방 대괄호, 물음표 문자를 포함하거나 시작 -또는 .과 가정 subfolder1이 목록에 표시되지 않습니다 자체.)
스테판 Chazelas가

@ StéphaneChazelas 파일에 파일이 포함되어 있으면 명령을 어떻게 수정합니까?
Peiti Li

$ sudo mv `ls | head -50000` 01/ sudo: unable to execute /bin/mv: Argument list too long
Brian Thomas

15

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/

2
POSIX 스 니펫은 보석입니다
iruvar

bash를 사용하여 오류가 발생하면 어떻게합니까?
Brian Thomas

8

단순하고 특수 문자, 공백 등을 지원하는 버전

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는 파일을 크기별로 나열)
oneklc

1
ls -Q와 호환 출력 생성하지 않습니다 xargs'의 예상 입력 형식을. 공백 문자를 포함하는 파일 이름에는 도움이되지만 큰 따옴표 나 백 슬래시에는 도움이되지 않으며 TAB을 포함한 제어 문자가 포함 된 파일 이름에는 해가되지 않습니다.
Stéphane Chazelas

3

다음과 같이해야 할 수도 있습니다.

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 변형에서 작동합니다.


1
(파일 이름에 공백, 탭, 줄 바꿈, 별표, 열린 대괄호, 물음표 문자 destination가 포함되어 있지 않거나 -또는로 시작 하는 경우에는 해당 목록에 표시되지 않습니다.)
Stéphane Chazelas

@StephaneChazelas True입니다. 이것은 완전한 해결책이 아니라 문제를 다루는 방법 일뿐입니다.
Karlson

3
  1. 파일을 이동하려는 디렉토리로 이동하십시오.
  2. 아래 명령을 실행

    find . -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/ 

에서 find명령, .(점)은 현재 디렉토리를 의미한다

Hello로 시작하고 gz로 끝나는 파일을 찾습니다. 처음 5000 개의 파일이 경로로 이동합니다. /data01/path/


1

나는이 같은 mv bash 오류없이 50,000의 이동을 성공적으로 수행 할 수있었습니다.

 ls | head -50000 | xargs -I{} sudo mv {} 01/

재미있게도, 이것은 삼바 공유에 있었으므로 50k 제한은 Windows 탐색기 GUI가 일반적으로 dir에서 60k 개 이상의 파일을 좋아하지 않기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.