Вы выполняете много из printf
s для того задания. почему не просто делают что-то как
cat pool.sam |\
awk '/./ {printf $1,$7+1,"\t"$3,"\t",($2!=16)?"+","-",$4,"\t",length($10)+$4,"\t1"}}'
Вот простой способ, который не сохраняет метаданные:
ssh server.example.com 'set -C; cat >/path/to/remote/file' </path/to/local/file
Вы можете сделать это с помощью rsync с правильными опциями. Код возврата будет равен 0, если файл существует, но вы можете узнать это из подробного вывода.
changes=$(rsync -a --ignore-existing --itemize-changes \
/path/to/local/file server.example.com:/path/to/remote/file)
if [ $? -ne 0 ]; then
echo >&2 "Some error occured"
return 2
elif [ -n "$changes" ]; then
echo "The file was copied"
return 0
else
echo "The file already existed"
return 1
fi
Сначала проверьте, существует ли файл на удаленном хосте:
if ! ssh remotehost [ -f incoming/DB1026910.sql ]; then
scp DB1026910.sql remotehost:incoming/
fi