有没有一种方法可以总结在ftp中某个目录的磁盘使用情况?我试图创建一个脚本,该脚本将检查当前目录的磁盘使用情况,并打印出主目录的可用空间。
例子:
ftp> cd /home/directory/
drw-rw-rw- 1 user group 0 Nov 16 /directory
drw-rw-rw- 1 user group 0 Nov 16 next/directory
drw-rw-rw- 1 user group 0 Nov 16 next/next/directory
由于某种原因,我看不到目录的任何大小。但是在它们里面是我需要检查使用情况的文件,因此我必须得到如下内容:
total disk usage for /home/directory = "some count"
total disk usage for /next/directory = "some count"
total disk usage for /../directory = "some count"
您可以使用Perl。从http://aplawrence.com/Unixart/perlnetftp.html中:
#!/usr/bin/perl
my $param = $ARGV[0];
# required modules
use Net::FTP;
use File::Listing qw(parse_dir);
sub getRecursiveDirListing
{
# create a new instance of the FTP connection
my $ftp = Net::FTP->new("fftpserver", Debug=>0) or die("Cannot connect $!");
# login to the server
$ftp->login("username","password") or die("Login failed $!");
# create an array to hold directories, it should be a local variable
local @dirs = ();
# directory parameter passed to the sub-routine
my $dir = $_[0];
# if the directory was passed onto the sub-routin, change the remote directory
$ftp->cwd($dir) if($dir);
# get the file listing
@ls = $ftp->ls('-lR');
# the current working directory on the remote server
my $cur_dir = $ftp->pwd();
my $totsize = 0;
my $i = 0;
my @arr = parse_dir(\@ls);
my $arrcnt = scalar(@arr);
if ($arrcnt == 0) {
print "$cur_dir 0\n";
$ftp->quit();
exit 1;
}
else {
# parse and loop through the directory listing
foreach my $file (parse_dir(\@ls))
{
$i++;
my($name, $type, $size, $mtime, $mode) = @$file;
$totsize = $totsize + $size if ($type eq 'f');
print "$cur_dir $totsize\n" if ($i == $arrcnt);
# recursive call to get the entries in the entry, and get an array of return values
# @xx = getRecursiveDirListing ("$cur_dir/$name") if ($type eq 'd');
}
# close the FTP connection
$ftp->quit();
}
# merge the array returned from the recursive call with the current directory listing
# return (@dirs,@xx);
}
@y = getRecursiveDirListing ("$param");
要运行它:
$ ./getSize.pl <directory>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句