Disk-Usage

如何檢查 ftp 中的磁碟使用情況?

  • September 19, 2016

有沒有辦法在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>

我建議您使用curlftpfs在文件系統上掛載您的 FTP 儲存庫。du -shc .然後在您想知道磁碟使用情況的文件夾中使用傳統命令。

引用自:https://unix.stackexchange.com/questions/21572