parallel
많은 디렉토리를 하위 디렉토리로 분할하는 데 사용하고 싶습니다 . 예를 들어 콘텐츠가 포함된 디렉토리가 1,000,000개 있지만 디렉토리 하나에 너무 많아서 기본 디렉토리에 10개의 디렉토리를 만들고 각 디렉토리에 100,000개의 원본 디렉토리를 이동하려고 합니다.
이미 명령을 시도했지만 ls -tr|parallel -n100000 mkdir "dir_{#}"\;mv {} "dir_{#}"
~10 000만 하나의 하위 디렉터리(때때로 ~6200, 때로는 ~12 500)로 이동하고 너무 많은 하위 디렉터리를 생성합니다. 때로는 필요한 것보다 10배 더 많은 경우도 있습니다. 물론, 각 하위 디렉터리에 정확히 100,000개의 dirs가 필요하지는 않습니다. 101,000 또는 98,500 dirs일 수 있으며, 100,000 범위의 숫자여야 합니다.
그렇다면 를 사용하여 어떻게 이를 수행할 수 있습니까 parallel
?
답변1
암소 비슷한 일종의 영양parallel
해결책:
parallel -j10 -n100000 --no-notice -k 'mkdir -p dir_{#}; mv {} -t dir_{#}' ::: *
j N
- 일자리 수.N
작업을 병렬로 실행합니다 . 귀하의 경우에는 새로운 10개의 상위 디렉토리 사이에 모든 디렉토리를 배포(이동)하기 위해 10개의 작업을 실행합니다.-n100000
100000
- 명령줄당 최대 인수(dirname)를 사용합니다.{#}
- 실행할 작업의 시퀀스 번호입니다. 이 대체 문자열은 실행 중인 작업의 시퀀스 번호로 대체됩니다.::: arguments
arguments
- stdin(표준 입력) 대신 명령줄을 입력 소스로 사용
수정 시간별로 정렬된 디렉터리(dirnames)를 처리하려면 다음 파이프라인을 사용합니다.
ls -dtr * | parallel -j10 -n100000 --no-notice -k 'mkdir -p dir_{#}; mv {} -t dir_{#}'