Este trozo de código está sacado de un script bastante más extenso y complejo. Las variables $DIR* son directorios y el resto creo que su nombre es autoexplicativo de su función.
En el primer ejemplo, se trata de comprimir un fichero a medida que el ftp lo va dejando. El mecanismo es simple: el ftp trae un fichero y en lugar de dejarlo en un fichero físico, lo deja en un fichero "tubería" por el que solamente pasa directamente al gzip, que lo comprime y, este sí, lo deja en un fichero físico.
Script principal
# Se crea la pipe para poder depositar el fichero
echo Creando la pipe
mkdir -p $DIR_PIP 2>/dev/null
rm -f $DIR_PIP/$dest_file 2>/dev/null
mkfifo $DIR_PIP/$dest_file
gzip -f <DIR_PIP> $DIR_FILE/$dest_file.dat.Z &
$DIR_BIN/ftp.sh $host $ori_file $DIR_PIP/$dest_file >$DIR_LOG/$dest_file.ftp
rm -f $DIR_PIP/$dest_file 2>/dev/null
echo Creando la pipe
mkdir -p $DIR_PIP 2>/dev/null
rm -f $DIR_PIP/$dest_file 2>/dev/null
mkfifo $DIR_PIP/$dest_file
gzip -f <DIR_PIP> $DIR_FILE/$dest_file.dat.Z &
$DIR_BIN/ftp.sh $host $ori_file $DIR_PIP/$dest_file >$DIR_LOG/$dest_file.ftp
rm -f $DIR_PIP/$dest_file 2>/dev/null
Script ftp.sh
host=$1
ori_file=$2
dest_file=$3
# Transferencia
ftp -n -v $host <<EOF>/dev/null
mkfifo -m 774 $pipa
zcat $fichero_dat >$pipa &
$ORACLE_HOME/bin/sqlldr control=$fichero_ctl data=$pipa parallel=$parallel direct=$direct log=$fichero_log bad=$DIR_LOG/${fichero_dat}.bad errors=100 <<EOF
\$USR_OWNER/\$PWD_OWNER
EOF
ori_file=$2
dest_file=$3
# Transferencia
ftp -n -v $host <<EOF>/dev/null
mkfifo -m 774 $pipa
zcat $fichero_dat >$pipa &
$ORACLE_HOME/bin/sqlldr control=$fichero_ctl data=$pipa parallel=$parallel direct=$direct log=$fichero_log bad=$DIR_LOG/${fichero_dat}.bad errors=100 <<EOF
\$USR_OWNER/\$PWD_OWNER
EOF