Você tem um erro lógico em seu pensamento, se eu entendi que você está correto. Você está tentando verificar se um arquivo terminou de copiar enquanto outro arquivo ainda está sendo copiado. Por enquanto, tudo bem.
MAS eu acho que você está usando algo parecido com o seu for PATH/*
- talvez cp path/* destination/*
? -, o que faria o comando copiar um arquivo após o outro, mas ao mesmo tempo você deseja verificar em segundo plano todos os arquivos simultaneamente se houver um comando cp em execução e se não quiser fazer algo mais com eles. Como você se certificaria de que seu cp já havia copiado seu arquivo e não apenas não estava lá ainda? Não funciona com o seu psof, pelo menos não se você quiser verificá-los ao mesmo tempo.
O que você realmente precisa fazer é verificar se o arquivo já existe no destino e tem a mesma soma do arquivo original, só então você pode ter certeza de que seu arquivo foi copiado com sucesso.
Isso deve lhe dar uma ideia melhor sobre o que procurar e por que seu script não funcionará da maneira que você deseja no momento.
Infelizmente, isso foi um pouco longo para um comentário.
Na verdade, sentei-me e criei um script que você provavelmente pode usar para o que descreveu. Não tenho certeza se ele está otimizado, mas pelo menos as verificações são executadas ao mesmo tempo em que a cópia está em andamento e continua fazendo algo após a conclusão da cópia:
#! /bin/bash
SOURCEPATH="/path/to/sourcefiles"
DESTINATION="/path/to/destination"
FILES='find $SOURCEPATH -type f'
function copy {
cp $SOURCEPATH/* $DESTINATION
}
function nextfunction {
#Could also do something else with the file already
echo "Done copying" $1
}
function check {
#Output so we see that the checks run simultaniously
echo "original path variable:" $1
echo "filename:" ${1##*/}
hashOfInputFile='md5sum $1 | cut -d" " -f1'
#make sure the file actually exists before trying to create a hashsum
while [ ! -f $DESTINATION/${1##*/} ]; do
sleep 5
done
#create a first hashsum to check if the file is completly copied
hashOfCopiedFile='md5sum $DESTINATION/${1##*/} | cut -d" " -f1'
#check if the hashsums are the same if not wait a little and create a new one
while [ "$hashOfInputFile" != "$hashOfCopiedFile" ]; do
sleep 5
hashOfCopiedFile='md5sum $DESTINATION/${1##*/} | cut -d" " -f1'
done
#proceed to do something else with the source file
nextfunction $1
}
#put the copy in the background so we can proceed with the script
copy &
for file in $FILES
do
#checks are also put in the background so the script continues
check $file &
done