top="$(pwd -P)" \
find . -type d -exec sh -c '
shift "$1"
for iDir
do
cd "$iDir" && \
if [ -f "image.jpg" ] && [ -s "config.ini" ]; then
eval "$(sed -e "/^[[]Acquisition]/,/^Milliseconds/!d
/^Year=/b; /^Month=/b; /^Day=/b; /^Hour=/b; /^Minute=/b
/^Second=/b; /^Milliseconds=/b; d" config.ini)"
new=$(printf "%04d-%02d-%02dT%02d:%02d:%02d:%03d\n" \
"$Year" "$Month" "$Day" "$Hour" "$Minute" "$Second" "$Milliseconds")
echo cp -p "image.jpg" "$new"
cp -p "image.jpg" "$new"
else
#echo >&2 "$iDir/image.jpg &/or config.ini file(s) missing or empty."
:
fi
cd "$top"
done
' 2 1 {} +
#meth-2
find . -type f -name config.ini -exec perl -F= -lane '
push @A, $F[1] if /^\[Acquisition]/ .. /^Milliseconds/ and
/^(?:Year|Month|Day|Hour|Minute|Second|Milliseconds)=/;
next if ! eof;
my(@a, $fmt) = qw/- - T : : :/;
(my $d = $ARGV) =~ s|/[^/]+$||;
print( STDERR "No image.jpg in dir: $d"),next if ! -f $d . "/image.jpg";
$fmt .= "${_}$a[$a++]" for map { "%0${_}s" } qw/4 2 2 2 2 2 3/;
print for map { "$d/$_" } "image.jpg", sprintf "$fmt.jpg", @A;
($a,@A)=(0);
' {} + | xargs -n 2 echo mv
Похоже, LOGFILE выходит за рамки, вы его экспортировали. См. Переменные среды.
Вам нужно экспортировать переменную в среду или передать ее в качестве аргумента.
например
Допустим, ваша программа называется abc
, затем выполните:
LOGFILE=./logdir/logfile
export LOGFILE
./abc
или
LOGFILE=./logdir/logfile ./abc
В качестве альтернативы передайте в качестве аргумента:
./abc "./logdir/logfile"
И укажите в программе:
logfilename="$1"
Указанное ниже перенаправление теперь работает нормально. Ничего нового не добавил.
/usr/bin/expect<<EOD > ${LOGFILE}
set timeout 60
spawn sftp $ES_SFTP_USER@$ES_SFTP_HOST:$R_LOCATION
expect "*?assword:"
send "$password\r"
expect "sftp>"
send "put /opt/AppServer/ES_billing_report/todays_report/*.txt\r"
expect "sftp>"
send "bye\r"
expect EOD
EOD