하위 폴더를 통해 수천 개의 파일 배포

하위 폴더를 통해 수천 개의 파일 배포

A수십만 개의 파일이 들어 있는 폴더가 있습니다 . 이 파일들을 다음으로 옮기고 싶습니다.새로운하위 폴더 S_i, 예: 각각 100개 파일(마지막 폴더에는 100개 미만의 파일이 있을 수 있음)

즉, 내 폴더에 다음이 A있는 경우:

file1
file2
...
file1000

앞으로 나는 다음을 갖게 될 것이다:

S_1:    
    file_1
    ...
    file_100    
S_2:
    file_101
    ...
    file_200
...

이 작업을 수행하기 위해 Zsh 스크립트를 수동으로 작성하기 전에(예: 변수를 사용하여 파일 수 계산) 미리 만들어진 도구(예:나뉘다) 이 작업에 도움이 될 것입니다.

답변1

파일 이름에 공백이 포함되지 않은 경우:

i=1;while read l;do mkdir $i;mv $l $((i++));done< <(ls|xargs -n100)

사용 parallel:

ls|parallel -n100 mkdir {#}\;mv {} {#}

답변2

그리고 zsh:

autoload zmv
zmv 'file_(<->)' 'S_$((1 + ($1 - 1) / 100))'

파일에 번호가 매겨져 있지 않지만 목록을 분할하려는 경우:

n=0; zmv -Q 'file_*(n)' 'S_$((n++/100+1))'

(n)토글 목록의 숫자 순서입니다( -Q와일드카드 한정자가 필요합니다).

파일당 하나씩 호출됩니다 mv. mvin() 을 구축하여 효율성을 향상 할 수 있습니다 zmodload zsh/files. 또는 다음과 같이 할 수도 있습니다.

files=(file_*(nN))
for ((n=1; $#files; n++)) {
  mv -- $files[1,100] S_$n
  files[1,100]=()
}

(nN)zsh 와일드카드 한정자이것은 지구를 더욱 제한합니다. n이다수치정렬은 glob을 켜는 옵션 N으로 , 일치하는 항목이 없을 때 glob을 빈 목록으로 확장합니다.nullglob

(이를 통해 mkdir S_$n사전에 해당 디렉터리가 존재하지 않는 경우 디렉터리를 추가할 수도 있습니다.)

답변3

dirsplit이라는 리눅스 유틸리티가 있습니다.https://linux.die.net/man/1/dirsplit

관련 정보