Como compactar arquivos em um loop e movê-los para diretórios diferentes?

0

Eu quero compactar os arquivos com base nos nomes de arquivos que são dinâmicos. Eu tenho o arquivo chamado: ClientNames

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

Meu nome de arquivo é: MAA.TRD.1111.2016.20.09.csv ( FILENAME.CODE.YEAR.DATE.MONTH .csv) Eu tenho vários arquivos com diferentes CODES em um diretório.

Toda vez que eu preciso verificar o CÓDIGO, buscar seu nome de cliente do arquivo ClientNames e zipar o arquivo com o nome - (para nome do arquivo: MAA.TRD.1111.2016.20.09.csv nome do arquivo zip: ABC.20162009.csv; MAA.TRD.1211.2016.20.09.csv nome do arquivo zip deve ser: APT.20162009.csv e da mesma forma)

Eu quero projetar um loop onde ele irá pegar um por um arquivo e zipar, renomeá-lo.

Meu código é:

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 

Mas o meu loop é pegar todos os arquivos juntos. Por favor ajude.

    
por Pooja25 20.09.2016 / 20:55

1 resposta

0
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 - defina a data, é melhor usar um formato como este que não tenha espaços, sinta-se à vontade para ajustar à sua preferência

3 - apenas faça um loop na quantidade de arquivos que você tem no diretório (isso irá se expandir para todos os arquivos que combinam com a convenção de nomenclatura que você delineou)

5 - obtenha o CÓDIGO do nome do arquivo

6 - obtém o CLIENTE de ClientNames baseado no CÓDIGO do arquivo atual (usando o sed aqui para incluir a remoção do espaço após a vírgula, se não houver realmente um espaço cut -d, -f2 irá funcionar) - isto assume que ClientNames é no CWD, use um caminho completo, se necessário

7 - crie o novo nome de arquivo para facilitar a reutilização posterior

8 - renomeie o arquivo para o seu novo nome

10 - zipar o arquivo (você não quer um zipfile terminando em .csv)

    
por 20.09.2016 / 23:33

Tags