Как создать пакетный файл для ftp-файлов в каталоге с именем, относящимся ко вчерашнему дню?

Как создать пакетный файл для ftp-файлов в каталоге с именем, относящимся ко вчерашнему дню?

У меня есть набор каталогов с закодированной в их именах датой.
Внутри этих каталогов есть файлы с именами files.csv.

Каталоги имеют стандартное имя, например,

/opt/oss/server/var/fileint/pm/pmexport_20150915

где имя последнего каталога меняется в зависимости от дня, например, pmexport_20150915это каталог от 15 сентября 2015 года.

Я хотел бы создать пакетный файл для автоматического ftp files.csvпредыдущего дня в фиксированное место назначения.
Например, сегодня 16 сентября 2015 года: я хочу ftp files.csvиз вчерашнего каталога, pmexport_20150915.

решение1

Ты виделэтотпост о загрузке файлов с помощью Powershell?

    ##################################################################################### 
##           Script will Upload files to FTP    
##           Author:  Vikas Sukhija                                                            
##                                                                     
##           Date: 02-24-2013 
##           Modified Date:- 02-26-2013 (included loging & monitoring) 
##################################################################################### 
#############################Define Log Files######################################## 

$date = get-date -format d 
$date = $date.ToString().Replace(“/”, “-”) 
$time = get-date -format t 
$month = get-date  
$month1 = $month.month 
$year1 = $month.year 
$time = $time.ToString().Replace(":", "-") 
$time = $time.ToString().Replace(" ", "") 

$log1 = ".\Logs" + "\" + "FTP_" + $date + "_.log" 
$log2 = ".\Logs" + "\" + "FTP_" + $month1 +"_" + $year1 +"_.log" 
$log3 = ".\Logs" + "\" + "FTP_" + $date + $time + "_.log" 

$logs = ".\Logs" + "\" + "Powershell" + $date + "_" + $time + "_.txt" 

#Start-Transcript -Path $logs  
$dt = Get-Date 
Add-Content $log3 "$dt : Script Started" 

###########################Variables###################################### 

$smtpServer = "smtp.lab.com" # Change  
$fromadd = "[email protected]" # Change  
$email1 = "[email protected]"  # Change  
$ftp = "ftp://127.0.0.1/" # Change 
$user = "vikas"  # Change 
$pass = "password" # Change 
$uploadfpath = "C:\Uploadftp\ftpfiles" # Define the Folder from where files will be uploaded  

########################################################################### 

$checkitems = Get-ChildItem $uploadfpath 
$countitems = $checkitems.count 
if ($countitems -eq 0) 
{ 
Write-Host "No items to process" -ForegroundColor Green 
$dt = Get-Date 
Add-Content $log3 "$dt : No items to process, script will exit" 
exit 
} 
$dt = Get-Date 
Add-Content $log3 "$dt : Total number of items to process $countitems" 

$processed = ".\processed\$date" + "-" + $time 
if((test-path $processed) -like $false) 
{ 
New-Item -Path "$processed" -type directory 
} 

##################################################################################### 

if ($error -ne $null) 
      { 
#SMTP Relay address 
$msg = new-object Net.Mail.MailMessage 
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 

#Mail sender 
$msg.From = $fromadd 
#mail recipient 
$msg.To.Add($email1) 
$msg.Subject = "FTP Script error" 
$msg.Body = $error 
$smtp.Send($msg) 
$dt = Get-Date 
Add-Content $log3 "$dt : Script Terminated because of error: $error" 
$error.clear() 
exit 

       } 
  else 

      { 
    Write-host "no errors till now" 
      } 

$webclient = New-Object System.Net.WebClient  

$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)   

#Upload each file in upload directory... 

foreach($item in (dir $uploadfpath "*.*")){  
    Write-host  "Uploading $item..."  -ForegroundColor Green 
    $dt = Get-Date 
    Add-Content $log3 "$dt : Uploading $item..." 
    $uri = New-Object System.Uri($ftp+$item.Name)  
    $webclient.UploadFile($uri, $item.FullName) 
      if($error -ne $null) 
        { 
    Write-Host "Items will not be moved" -ForegroundColor Red 
        } 
        else 
        { 
    Write-Host "Moving $item to processed" -ForegroundColor green 
    Move-Item "$uploadfpath\$item" $processed 
    $dt = Get-Date 
    Add-Content $log3 "$dt : Moving $item to processed" 
        } 
 }  

if ($error -ne $null) 
      { 
#SMTP Relay address 
$msg = new-object Net.Mail.MailMessage 
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 

#Mail sender 
$msg.From = $fromadd 
#mail recipient 
$msg.To.Add($email1) 
$msg.Subject = "FTP Script error" 
$msg.Body = $error 
$smtp.Send($msg) 
$dt = Get-Date 
Add-Content $log3 "$dt : Script encountered error: $error" 
$error.clear() 
       } 
  else 

      { 
    Write-host "no errors till now" 
      } 
$dt = Get-Date 
Add-Content $log3 "$dt : Script Processing finished" 

#Stop-Transcript 
##################################################################

Все, что вам нужно создать, это строку, которая содержит файлы, которые вы хотите обновить. Если вы используете функцию Get-Date следующим образом:
(Get-Date).AddDays(-1).ToString('yyyyMMdd')
Тогда вы сможете создать массив строк, содержащий ваши файлы, которые вы хотите загрузить. Вы должны иметь возможность сделать это, изменив get-childitem, чтобы включить фильтр в строку.
Я не могу полностью скомпилировать это и протестировать это для вас, так как у меня нет FTP, чтобы проверить это, и ограниченное количество времени, но надеюсь, что с небольшой настройкой вы заставите это работать нормально.

решение2

Предположим, что вы хотите взять файлыс машины Linux. Действия, которые вам нужно выполнить, одинаковы, если вам нужно запрограммировать оболочку bash или powershell, отличается только язык... редко бывает так, что в языке нет нужного вам слова (команды), и вам приходится использовать другие.

Я не дам вам полностью работающее решение, я буду использовать scpто, что делает безопасную копию (это программа удаленного копирования файлов). Примите это как подсказки и какую-то команду, которая может оказаться полезной (сделайте man dateдля помощи date...).

#!/bin/bash
DestinationPath="/tmp"    # Here you have to put where you want to copy the file
FileToTake='files.csv'    # Here the file you want to take
PathFrom=$(date -d yesterday "+/opt/oss/server/var/fileint/pm/pmexport_%Y%m%d")
FullFileNameToTake="${PathFrom}/${FileToTake}"
scp -p user@host:"$FullFileNameToTake" "$DestinationPath"

если вы хотите использовать, ftpвы можете объединить то, что выше, сэтот ответ.

Связанный контент