Я отправляю файл с мэйнфрейма на ftp-сервер Linux с помощью sftp.
Я хочу добавить дату к имени файла, как только файл будет находиться в ящике Linux. (Пример: filename.txt становится filename122308.txt)
Я пробовал команду «переименовать», используя «date +% m% d% y» - файл был переименован, но флаги не были выполнены (имя файла стало filename'date +% m% d% y'.txt
Команды cp и mv не работают ... есть идеи?
Спасибо.





Вы можете сделать это через командную строку? Существуют варианты для выполнения sftp как ...
sftp [[user@]host[:file [file]]]
... чтобы вы могли казнить ...
export WHEN=`date +%m%d%y`
sftp theUser@theHost:filename$WHEN.txt filename.txt <<-!
thePassword
!
Команды отправляются через управляющую карту JCL. Не думаю, что такой подход сработает.
Как вы отправляете команды в JCL? Вы выполняете команду оболочки из JCL с помощью команд BPX *?
Поскольку sftp не запускает оболочку, команду date выполнять нечего. Вероятно, вам придется оценить новое имя, которое вы хотите, на стороне отправителя, а затем выполнить переименование sftp.
Другой вариант - отправить файлы в область очереди (например, в папку с вашей строкой даты) и иметь сценарий в окне Linux, соответствующим образом перемещая / переименовывая полученные файлы.
У вас есть доступ к серверу Linux? В этом случае вы можете просто переименовать файлы там. Например, вы можете использовать inotify для мониторинга каталога, а затем иметь сценарий, который добавляет дату к файлам всякий раз, когда в этом каталоге создается новый файл.
Вот простой пример на Python (хотя для большинства языков есть привязки inotify). Событие, которое вы хотите прослушать, - IN_CREATE.
#Establish a local variable to store the LOGINID to be used
export USERID=xxxxx
#Establish a local variable to store the Path/file location on Remote machine
export REMOTEPATH=/some/path/
#Establish a local variable to store the NAME of the remote Server
export TARGET=192.168.0.xx
#Establish a local variable to store the new component of the file name (in
#this case, a modification of Date)
export WHEN=`date +%m%d%y`
#Demonstrate that the USERID variable is set properly by echoing it out to the
#StandardOut
echo "User "$USERID
#Demonstrate that the TARGET variable is set properly by echoing it out to the
#StandardOut
echo "Target Server: "$TARGET
#Demonstrate that the REMOTEPATH / server variable is set properly by echoing
#it out to the StandardOut
echo "Target Path "$REMOTEPATH
#Demonstrate that the WHEN / date name modication variable is set properly by
#echoing it out to the StandardOut
echo "Date component of file "$WHEN
#Just echo out that we're about to do something useful
echo "Sending file to REMOTE"
#Simulate the user typing out a command by using the "echo" command. We use
#the $REMOTEPATH and $WHEN variables to modify "what the user types" but when
#we're done, echo passes information into SFTP just like the user were sitting
#there typing in the #commands. In this case, it should send in
#"put /local/path/file /some/path/fileName09092009.txt"
#That is provided as the command list to sftp because of the single "-" that
#says "get my list of commands from standard-input" The -vvv is for verbose
#(lots of diagnostics) and then the $USERID@$TARGET uses the USERID and TARGET
#variables to connect as user-at-server for the exchange.
#A passwordless SSH authentication is already in place, so no password
#is needed.
echo "put /local/path/file $REMOTEPATH/fileName$WHEN.txt " | \
sftp -b - -vvv $USERID@$TARGET
#Just echo out that we're about to do the next step and change file
#permissions.
echo "Changing file Permissions on REMOTE"
echo "Done"
Не уверен насчет вашего SFTP-клиента мэйнфрейма, но многие SFTP-клиенты поддерживают использование! префикс для запуска команд локальной операционной системы. Таким образом, вы можете скопировать файл с новым именем перед отправкой, затем отправить, а затем удалить копию.
Например.:
!cp filename.txt filename122308.txt
put filename122308.txt
!rm filename122308.txt
exit
Если пространство является премиальным, используйте mv дважды вместо cp & rm.
Команды отправляются через управляющую карту JCL. Не думаю, что такой подход сработает.