bash는 seq 및 uniq의 여러 파일을 하위 폴더로 전송합니다.

bash는 seq 및 uniq의 여러 파일을 하위 폴더로 전송합니다.

다음과 같은 파일이 수천 개 이상 있습니다.

A20200727.2015+0200-2030+0200_SubNetwork=ppp,MeContext=xxx23,celltracefile_DUL1_3.bin.gz
A20200727.2015+0200-2030+0200_SubNetwork=ppp,MeContext=ggg13,celltracefile_DUL1_3.bin.gz
A20200727.2015+0200-2030+0200_SubNetwork=ppp,MeContext=aaa56,celltracefile_DUL1_3.bin.gz
A20200727.2015+0200-2030+0200_SubNetwork=ppp,MeContext=slsf86,celltracefile_DUL1_3.bin.gz
A20200727.2015+0200-2030+0200_SubNetwork=ppp,MeContext=ccc57,celltracefile_DUL1_3.bin.gz

cut- sort- uniq xxx23, ggg13, aaa56, 문자를 시도 중입니다 slsf86. 수천 개가 있습니다. 그 중 몇 개가 있는지 세어보고 800 xxx23uniq 묶음으로 하위 폴더로 이동 ggg13하고 소스에서 800 uniq가 포함된 여러 폴더로 이동합니다.aaa56slsf86

내 생각은 목록을 배열에 넣고 각 하위 폴더의 배열 값을 호출하는 것입니다. 후속 폴더가 커질 때 추가 숫자 800을 사용하여 자동으로 생성되도록 하려면 어떻게 해야 합니까?

#!/bin/bash

origFolder="/data/rawdata/temp"
destFolder="/data/rawdata/cpp_tr"
NoOfFilesinEachDir=800

###################################################################################################

numberTR=`ls $origFolder | egrep "^A[[:digit:]]{8}\.[[:digit:]]{4}.*bin.gz" | cut -f2 -d',' | cut -d'=' -f2 | sort | uniq | wc -l`
siteuniq=`ls $origFolder | egrep "^A[[:digit:]]{8}\.[[:digit:]]{4}.*bin.gz" | cut -f2 -d',' | cut -d'=' -f2 | sort | uniq`


##Calculate and create folders required to put 800files.
for count in $NoOfFilesinEachDir; do
    nn=1
    numberofbunch=$((numberTR%count?numberTR/count+1:numberTR/count))
    if [[ $numberTR -le $count ]]; then
        mkdir "$destFolder/cpptr_$nn"
    else [[ $numberTR -gt $count ]];
        for (( pp=1; pp<=$numberofbunch; pp++ )); do
            mkdir "$destFolder/cpptr_$pp"
        done
    fi
done


## I am trying to make this list automate for no of folders created above
for number in $NoOfFilesinEachDir; do
kkk=()
#echo $site
read -r -a kkk <<< $siteuniq
lastelement=$(echo "${#siteuniq[@]}")
    for (( bb=0; bb<=$number; bb++ )); do
        find $origFolder -regextype sed -regex ".*${kkk[bb]}*.*" -exec  cp -fp {} $destFolder/cpptr_1 \;
    done
    
    for (( cc=801; cc<=1600; cc++ )); do
        find $origFolder -regextype sed -regex ".*${kkk[cc]}*.*" -exec  cp -fp {} $destFolder/cpptr_2 \;
    done
    
    for (( dd=1601; dd<=2400; dd++ )); do
        find $origFolder -regextype sed -regex ".*${kkk[dd]}*.*" -exec  cp -fp {} $destFolder/cpptr_3 \;
    done
    for (( dd=2401; dd<=$lastelement; dd++ )); do
        find $origFolder -regextype sed -regex ".*${kkk[dd]}*.*" -exec  cp -fp {} $destFolder/cpptr_4 \;
    done
done
~

관련 정보