Mirando su propia respuesta , está más claro qué es lo que realmente querría hacer.
Aquí está mi propia opinión sobre eso:
#!/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"
La diferencia entre su propia respuesta y esta es que la lista de archivos solo se genera una vez y no una vez por línea en el archivo de datos.
El archivo de datos se analiza de tal manera que su cuarta|
-columna delimitada se extrae y se guarda en un archivo temporal. Este archivo se consulta una vez por cada archivo en el directorio que está investigando, usando grep
. Si el bit delimitado cuarto_
-del nombre de archivo está presente en ese archivo temporal, el archivo se mueve. Quite el echo
para mover archivos.
Это то, что вам нужно:
sh -c 'tail -f file & cat' | tee file2
Обратите внимание, ваши комментарии дублируются для вывода терминала, когда вы нажимаете ввод.
Он также работает с {...}
и (...)
вместо sh -c
, но тогда tail -f
не перестанет работать, когда вы нажмете ctrl + c .