압축 파일을 반복하여 다른 디렉터리로 이동하는 방법은 무엇입니까?

압축 파일을 반복하여 다른 디렉터리로 이동하는 방법은 무엇입니까?

동적 파일 이름을 기반으로 파일을 압축하고 싶습니다. 내 파일 이름은: ClientNames

CODE, Client Name
1111, ABC
1231, XYZ
1211, APT
1561, OPT

내 파일 이름은 MAA.TRD.1111.2016.20.09.csv(파일명.코드.연도.날짜.월.csv) 디렉터리에 서로 다른 코드를 가진 여러 파일이 있습니다.

코드를 확인해야 할 때마다 ClientNames 파일에서 클라이언트 이름을 가져오고 이름으로 파일을 압축합니다. - (파일 이름: MAA.TRD.1111.2016.20.09.csv zip 파일 이름: ABC.20162009.csv; MAA.TRD . 1211.2016 .20.09.csv zip 파일 이름은 APT.20162009.csv 등이어야 합니다.)

파일을 하나씩 넣고 압축하고 이름을 바꾸는 루프를 디자인하고 싶습니다.

내 코드는 다음과 같습니다

FILES=MAA.TRD*.csv

for file in ${FILES}
    do
    ls -lrt MAA.TRD*.csv | cut -d '.' -f 3 > $SCRIPT/LogfileCODE
    cd $SCRIPT
    DATE=`date`
    Filename=`grep -Fwf $LogfileCODE $ClientNames | cut -d ',' -f 2`
    ZIPFILENAME="${Filename}_${DATE}"         
    echo " Zipping of file is starting "
    zip -j ${ZIPFILENAME}-$DATE.zip $file           
done 

하지만 내 for 루프는 모든 파일을 하나로 묶습니다. 도와주세요.

답변1

1  DATE=$(date '+%Y%m%d')
2
3  for FILE in MAA.TRD*.csv
4  do
5      CODE=$(echo $FILE | cut -d. -f3)
6      CLIENT=$(grep -w $CODE ClientNames | sed 's/^.*, //')
7      NEWFILE=$CLIENT.$DATE.csv
8      mv $FILE $NEWFILE
9      echo " Zipping of $NEWFILE is starting "
10     zip -j $NEWFILE.zip $NEWFILE           
11 done

1 - 공백이 없는 형식으로 날짜를 설정하고 원하는 대로 자유롭게 조정하세요.

3 - 간단히 디렉터리의 모든 파일을 반복합니다. (이렇게 하면 설명된 명명 규칙과 일치하는 모든 파일로 확장됩니다.)

5 - 파일 이름에서 코드 가져오기

6 - 현재 파일의 코드를 기반으로 ClientNames에서 CLIENT를 가져옵니다(쉼표 뒤의 공백을 제거하는 것을 포함하여 여기에서 sed를 사용합니다. cut -d, -f2실제로 공백이 없어도 괜찮습니다). 이는 ClientNames가 CWD에 있다고 가정합니다. 필요한 경우 경로

7 - 나중에 다시 사용할 수 있도록 새 파일 이름 구성

8 - 파일 이름을 새 이름으로 바꿉니다.

10 - Zip 파일(zip 파일이 .csv로 끝나는 것을 원하지 않음)

관련 정보