Script - Mova os arquivos que correspondem aos registros no arquivo de texto com base nos parâmetros

0

O que estou tentando fazer é mover arquivos no meu diretório que correspondam aos registros do meu arquivo de texto com base em dois parâmetros.

Por exemplo, tenho um registro no meu arquivo de texto que diz:

SPPARK|10416|3308123|3308123|Uphold|Thelma|1930/05/20||

Eu tenho um arquivo no meu diretório que diz:

1123_M1123_UPHOLD_M1123_MESSAGE_SPPARK_348642.pdf

Portanto, se o sobrenome UPHOLD e o quarto campo M1123 corresponderem aos meus campos no meu arquivo de texto, então eu quero movê-los para um diretório especificado.

for files in test/* ; do
 echo $files | awk -F "_" '{print $3,$4}'
done
    
por Josh Adams 14.06.2018 / 14:33

2 respostas

0

Tente este. Altere o comando "echo" para cp ou mv após o teste:

for f in samples.txt ; do 
  echo /source/path/*$(cut -d '|' -f 5,2 $f | tr '|'a-z '_'A-Z)*.pdf /destination/path
done

Me desculpe, meu mal. Obrigado @Kusalananda. Por favor, considere a resposta acima errada e tente esta em vez disso. Supondo que você esteja filtrando nas colunas 5 e 4, ele copia arquivos de / src para / dst:

awk -F "|" '{system("cp /src/*"toupper($5)"_"$4"*.pdf /dst")}' samples.txt
    
por 14.06.2018 / 14:55
0

Eu abordaria isso ao contrário:

  • leia e divida o arquivo de texto em campos linha por linha
  • corresponde e move os arquivos correspondentes

E.G. (assume bash e GNU mv ):

#!/bin/bash

shopt -s nullglob

while IFS='|' read -r loc a b c last first d e; do 
  echo mv --no-clobber -t path/to/target/ -- *_"$a"_"${last^^}"_*_*_*_*.pdf
done < file.txt

Remova o echo quando tiver a certeza de que está a fazer o que pretende

    
por 14.06.2018 / 15:18

Tags