Есть ли какая-либо опция / команда для различения файлов на основе статуса копирования файла в каталоге?

awk '/Schedule/{A="";S=$NF;next}/Active/{A=$NF;next}/Customer/&&A=="yes"{print $NF,S}' billing
1
28.08.2017, 11:25
1 ответ

У вас есть логическая ошибка в вашем мышлении, если я правильно понял, что это так. Вы пытаетесь проверить, закончилось ли копирование одного файла, в то время как другой файл все еще копируется. Все идет нормально.

НО я предполагаю, что вы используете что-то похожее на ваш для PATH/*- возможно, cp path/* destination/*? - , что заставит команду копировать один файл за другим, но в то же время вы хотите проверить в фоновом режиме все файлы одновременно, если запущена команда cp, а если нет, вы хотите сделать с ними что-то еще. Как бы вы убедились, что ваш cp уже скопировал ваш файл, а не просто еще не был там? Не будет работать с вашим psof, по крайней мере, если вы хотите проверить их одновременно.

На самом деле вам нужно проверить, существует ли уже файл в месте назначения и имеет ли он ту же хеш-сумму, что и исходный файл, только тогда вы сможете быть уверены, что ваш файл был успешно скопирован.

Это должно дать вам лучшее представление о том, к чему стремиться и почему ваш сценарий не будет работать так, как вы хотите в данный момент.

К сожалению, это был немного длинный комментарий.

На самом деле я сел и создал сценарий, который вы, вероятно, сможете использовать для того, что вы описали. Не уверен, что он оптимизирован, но, по крайней мере, проверки запускаются одновременно с копированием, и он продолжает что-то делать после завершения копирования:

#! /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
1
27.01.2020, 23:45

Теги

Похожие вопросы