iT邦幫忙

0

BusyBox上刪除或搬移過期檔案

BusyBox 為 v 1.1.0 版( synology CS407e上的 )
希望將指定目錄下,包含其下子目錄本身及檔案,只要超過10天(含)以上沒有存取,就刪除或搬移到指定位置。
試過find指令,不過一般find的參數很多都不支援,exec也有問題
是否有熱心大大能提供指令或Script也行

1 個回答

9
sula3065408
iT邦研究生 1 級 ‧ 2010-10-27 15:40:28
最佳解答

大概像這樣,假設可以用find但不支援全部的參數。

<pre class="c" name="code">
#!/usr/bin/perl -w

my $target="./";
my @lines=`find $target`;
my $now=time();

foreach my $line(@lines){
	chomp($line);
	my @infos = stat "$line"; #get file info include last update with UNIX-time
	print "$line\n";
	print "\tLast touch at $infos[8]\n";
	print "\tInterval ".($now-$infos[8])." seconds\n";
	if(($now-$infos[8]) >= (10*24*60*60)){
		print "\t\tOver 10 days\n";
                #do your want
	}else{
		print "\t\tNot over 10 days\n";
	}
	
}

參考:http://easun.org/perl/perl-toc/ch11.html

sungnoone iT邦新手 2 級 ‧ 2010-11-01 14:04:32 檢舉

神仙出現了,趕快拜! 肛溫阿!
另外請教一下
如果資料夾是過期且夾子內沒有檔案即刪除,要如何改?因為發現過期檔案是殺掉了,不過留下一堆空的資料夾

sula3065408 iT邦研究生 1 級 ‧ 2010-11-01 17:19:21 檢舉

引用:

http://digitalpbk.com/2009/11/perl-script-remove-directory-and-contents-recursively

做一點小修改即可只刪除空白資料夾,請自行組合上面程式改成你的需求。

<pre class="c" name="code">
#!/usr/bin/perl -w

deldir("a"); # or deldir($ARGV[0]) to make it commandline
 
sub deldir {
  my $dirtodel = pop;
  my $sep = '/';
  
  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 { (-d $_)?deldir($_):return} @files;

  rmdir($dirtodel);
}

我要發表回答

立即登入回答