Analisando sua sua própria resposta , fica mais claro o que você realmente gostaria de fazer.
Aqui está minha opinião:
#!/bin/sh
dupsfile='/archival/test/sppark/dataindex/staging/duplicates.txt'
indir='/archival/test/sppark/datapdf/staging/renamedTriage'
baddir='/archival/test/sppark/datapdf/staging/badFiles'
dups=$( mktemp )
cut -d '|' -f 4 <"$dupsfile" >"$dups"
for pathname in "$indir"/*; do
[ ! -f "$pathname" ] && continue
string=$( printf '%s\n' "${pathname##*/}" | cut -d '_' -f 4 )
if grep -qxF "$string" "$dups" then
echo mv "$pathname" "$baddir"
fi
done
rm "$dups"
A diferença entre sua própria resposta e isso é que a lista de arquivos é gerada apenas uma vez e não uma vez por linha no arquivo de dados.
O arquivo de dados é analisado de forma que sua coluna 4 |
-delimited seja extraída e salva em um arquivo temporário. Este arquivo é consultado uma vez para cada arquivo no diretório que você está investigando, usando grep
. Se o 4 _
-delimited do nome do arquivo estiver presente nesse arquivo temporário, o arquivo será movido. Remova o echo
para mover arquivos.