iT邦幫忙

0

FTP SERVER 如何自動刪除存放時間已久的資料?

  • 分享至 

  • xImage

各位ITHOME的大大們您們好!

小弟有件事情請求,目前手邊有一台FTP SERVER,因為它的功用是上傳交換資料專用,重點是時間一但過久了資料越存越多,有什麼方法設定能自動刪除存放在FTP SERVER已久的資料?疑惑

fillano iT邦超人 1 級 ‧ 2010-11-03 12:10:16 檢舉
ㄝ,大概只有小財神是ITHome的大大...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
18
sharbui
iT邦新手 3 級 ‧ 2010-11-04 23:53:27
最佳解答

forfiles /p X:\FTP_ROOT /s /D -10 /C "cmd /c del /f @file"

將...以上命令.存成一個DELOLDFILE.BAT...
再去WINDOWS排程管理員跑.....

適用win2000 2003 2008...XP有的沒有forfiles...

12
sailsolitary
iT邦研究生 2 級 ‧ 2010-11-03 13:27:18

FTP Server 的系統是什麼的? 這樣才有辦法解決問題吧 ~~

如果是由別人提供的系統, 那使用 FTP 軟體連入後, 依日期排列, 就可以刪除了
如果系統是放在內部的, 那由批次指令排程就可以自動刪除了

系統是Windows server 2003
批次要怎麼寫= ="?

12
shunyuan
iT邦研究生 1 級 ‧ 2010-11-03 13:30:10

如果 server 是 Linux 就好辦,可以寫 shell script 把太老舊的檔案刪除(ftp 的目錄,其實也是 Linux 上的目錄),然後用 cron 排程,或是手動執行。

Windows 也可以這樣做,不過批次檔可能要用 PowerScript

系統是Windows server 2003
批次要怎麼寫= ="?Orz

16
zyman2008
iT邦大師 6 級 ‧ 2010-11-03 13:42:08

如果 server 是 Windows 的, 用免費的auto delete工具就可以做了,
不用傷腦筋自己寫 script.

這個軟體不錯用 Cyber-D's Autodelete
http://www.softpedia.com/get/System/System-Miscellaneous/Cyber-D-s-Autodelete.shtml

這套要安裝、常駐,有點不喜歡

感謝提供。

14
sungnoone
iT邦新手 2 級 ‧ 2010-11-03 15:02:37

到微軟指令碼中心
下載這個檔 HeyScriptingGuy.exe
解開後 閱讀 hey_archive.chm
在 file,folders and file systems\file 這個類別底下
稍微修改這三篇範例中的其中一個
How Can I Delete All the .BAK Files in a Folder That Are More Than 7 Days Old?
How Can I Delete All Files Older Than a Specified Date?
How Can I Delete a Backup File Created on the Previous Day?
搭配 Windows的排程就搞定了。
抱歉因為我手上沒有正好符合的指令碼給你用,只能請你自己參考修改一下囉!

14
Ken(Bigcandy)
iT邦大師 1 級 ‧ 2010-11-03 16:42:08

有幾個方法:
1.vbs
用vbs定期刪除和搬移符合條件的檔案(我修改了名稱)

2.PowerShell
PowerShell 自動刪除過期檔案

3.自己寫程式,會的話,滿簡單的

18
davidliu9116
iT邦研究生 2 級 ‧ 2010-11-03 16:54:39

個人推薦用robocopy開心

刪除 N 天前的檔案 robocopy.exe
http://blog.ithome.com.tw/index.php?op=ViewArticle&articleId=17443&blogId=1013

自動在windows執行 每天刪除n天前的檔案
http://keenkiller0603.blogspot.com/2008/08/windows-n.html

chang0206 iT邦新手 1 級 ‧ 2010-11-04 09:06:44 檢舉

推薦Robocopy ,很好用的檔案複製、搬移工具!

jay214 iT邦研究生 3 級 ‧ 2010-11-04 10:14:05 檢舉

哈.. 竟然無意間發現我的文件被引用..

刪除 N 天前的檔案 robocopy.exe
http://blog.ithome.com.tw/index.php?op=ViewArticle&articleId=17443&blogId=1013

16
twnem
iT邦好手 1 級 ‧ 2010-11-03 19:41:24

要設定能自動刪除存放在 FTP Server 已久的資料是可以的
但...什麼時候需要找那些舊檔案,
當你找不到的時候
是不是在那邊東翻西翻所有的資料夾
最好不要這樣設定 ... " 很危險 "

jay214 iT邦研究生 3 級 ‧ 2010-11-04 11:46:21 檢舉

知道自己在做甚麼就不危險..
危險的是不知道自己在做甚麼的人那才叫危險..

12
crusade
iT邦研究生 4 級 ‧ 2010-11-04 13:25:16

建立一個 vbs 檔案,內容如下,只要改天數跟目錄路徑即可,再定排程執行

' 指定所有變數必須事先宣告才能使用
Option Explicit

' 宣告變數
Dim FSO, agoDays, modifiedDate, delFolder

' 請將下面的變數值換成你要的
' == 開始 ==
' 指定 n 天前的檔案,現在是 7 天前
agoDays = 7' 欲刪除檔案所在之目錄
delFolder = "D:\FTP"
' == 結束 ==

' 建立檔案系統物件(File System Object)
Set FSO = CreateObject("Scripting.FileSystemObject")

' 取得檔案的修改日期
modifiedDate = DateAdd("d", -agoDays, Date)

' 呼叫刪除檔案的子程序
DelFilesInFolder FSO.GetFolder(delFolder)

' 刪除檔案的子程序
Sub DelFilesInFolder(folder)
' 宣告變數
Dim file, subFolder

' 找出目前所在目錄內所有的檔案
For Each file In folder.Files
' 檢查檔案日期是否符合條件,若符合,就刪除
If ((file.DateLastModified <= modifiedDate)) Then
file.delete
End If
Next

' 如果遇到子目錄,也要進去檢查並刪除
For Each subFolder in folder.SubFolders
DelFilesInFolder subFolder
Next
End Sub

12
sula3065408
iT邦研究生 1 級 ‧ 2010-11-04 16:54:43

=此Script理論上可以跨平台=

下載activePerl-Win32,安裝它 (假設沒安裝過perl在windows機器上)

可以使用perl2Exe將script轉成執行檔(perl2Exe非免費軟體)

以下是我之前回答相似的問題,此次改版過的CODE
開一個文字檔名為delOverdue.pl,把code拷貝進去,開終端機執行該script。

命令格式:
$delOverdue <targetDir> <seconds>
<targetDir> Target directory
<seconds> Expire seconds

&lt;pre class="c" name="code">
#!/usr/bin/perl -w
if(@ARGV != 2){
	print "delOverdue &lt;targetDir> &lt;seconds>";
	exit -1;
}

if (!($ARGV[1] =~ /^[+-]?\d+$/ )) {
	print "&lt;seconds> must be a number!\n";
	exit -1;
}

if (!((-e $ARGV[0])&&(-d $ARGV[0]))){
	print "It's not directory or not exist!\n";
	exit -1;
}

deldir($ARGV[0],$ARGV[1]); # or deldir($ARGV[0]) to make it commandline
print "Process done!\n";


sub deldir {
  my $dirtodel = shift;
  my $timeLimit = shift;
  my $sep = '/';
  my $now=time();
  
  opendir(DIR, $dirtodel) or die "Open dir fail!\n$!\n";
  my @files = readdir(DIR);
  closedir(DIR);
 
  @files = grep { !/^\.{1,2}/ } @files;
  @files = map { $_ = "$dirtodel$sep$_"} @files;
  @files = map {
  	if(-d $_){
  		deldir($_,$timeLimit);
  	}else{
  		my @infos = stat "$_";
  		if(($now-$infos[8])>$timeLimit){
  			print "Delete file $_\n";
  			unlink($_);
  		}else{
				print "[FILE] $_(".($now-$infos[8]).")\n";
			}
  	}
  }@files;
  my @infos = stat "$dirtodel";
	if(($now-$infos[8])>$timeLimit){
		print "Delete directory $dirtodel\n";
  	rmdir($dirtodel);
	}else{
		print "[DIR]  $dirtodel(".($now-$infos[8]).")\n";
	}
}

我要發表回答

立即登入回答