SFTP Переименовать файл, чтобы добавить дату - PullRequest
3 голосов
/ 23 декабря 2008

Я отправляю файл с хоста мэйнфрейма на сервер ftp linux, используя sftp.

Я хочу добавить дату к имени файла, как только файл окажется в окне linux. (Например: filename.txt становится filename122308.txt)

Я пробовал команду 'переименовать', используя 'date +% m% d% y' - файл был переименован, но флаги не были выполнены (имя файла стало filename'date +% m% d% y'.txt

Команды 'cp' и 'mv' не работают ... есть идеи?

Спасибо.

Ответы [ 6 ]

1 голос
/ 23 декабря 2008

Поскольку sftp не запускает оболочку, выполнить команду date не на что. Вам, вероятно, придется оценить новое имя, которое вы хотите на стороне отправителя, и затем выполнить переименование sftp.

Другим вариантом является отправка файлов в очередь (например, папка с вашей строкой даты) и сценарий на окне linux для перемещения / переименования полученных файлов соответственно.

1 голос
/ 23 декабря 2008

Команды отправляются через контрольную карту JCL. Я не думаю, что этот подход будет работать.

0 голосов
/ 10 августа 2010

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

например:.

!cp filename.txt filename122308.txt
put filename122308.txt
!rm filename122308.txt
exit

Если пробел является премией, дважды используйте mv вместо cp & rm.

0 голосов
/ 21 сентября 2009
#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"                                          
0 голосов
/ 24 декабря 2008

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

Вот простой пример в Python (хотя для большинства языков есть привязки inotify). Событие, которое вы хотите прослушать, - IN_CREATE.

0 голосов
/ 23 декабря 2008

Можете ли вы сделать это через командную строку? Существуют опции для выполнения sftp как ...

sftp [[user@]host[:file [file]]]

... чтобы вы могли выполнить ...

export WHEN=`date +%m%d%y`
sftp theUser@theHost:filename$WHEN.txt filename.txt <<-!
thePassword
!
...