Você pode usar o (s) arquivo (s) de marcação "processado (s)".
#!/bin/bash
TAG="done"
FILES=/path/to/files/*
for f in $FILES
do
case "$f" in
*.$TAG) # process mark-files
echo "# TAG-FILE=$f"
b='echo $f | sed "s/\.$TAG\$//"' # get base file of the mark-file
echo "# FILE=$b"
if [ ! -f "$b" ] ; then
echo "# TAG-FILE REMOVE"
rm $f # remove mark-file without base file
file
continue # do not process mark-files themselves
;;
esac
if [ -f "$f.TAG" ] ; then
echo "# FILE=$f"
echo "# TAG-FILE PRESENT"
continue # mark-file present - skip processing
fi
echo "# FILE=$f"
echo "# TAG-FILE ABSENT => PROCESSING"
# [some_command_to_make_changes_into_file] $f > tmp_$f; mv tmp_$f $f
echo "# PROCESSED"
touch "$f.$TAG" # create mark-file
if [ -f "$f.TAG" ] ; then
echo "# TAG-FILE CREATED"
else
echo "# TAG-FILE CREATION FAILED!"
exit
fi
done
Melhoria possível: Você pode armazenar arquivos de marcação em outro diretório.