SFTP Переименовать файл по дате добавления

Я отправляю файл с мэйнфрейма на ftp-сервер Linux с помощью sftp.

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

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

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

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
12 055
6

Ответы 6

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

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

... чтобы вы могли казнить ...

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

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

Chad 23.12.2008 20:16

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

Как вы отправляете команды в JCL? Вы выполняете команду оболочки из JCL с помощью команд BPX *?

Anthony Giorgio 05.01.2009 18:26

Поскольку 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.

Другие вопросы по теме