如何直接grep到ftp?

这个语法有什么问题? 如何直接在远程FTP上写输出,因为硬盘空间不足?

该命令正在工作,但没有硬盘空间来获得完整的结果:

find /somedir/ -name '*.*' -exec grep -i 'some string' /dev/null {} + >> /somedir/output.txt 

我试过类似的东西,但我得到错误“操作不适用”:

 find /somedir/ -name '*.*' -exec grep -i 'some string' /dev/null {} + >> ftp -u ftp://[email protected] /somedir/output.txt 

 grep -r 'some sting' /somedir | ssh user@host "dd of=outputfile" 

这可能会诀窍,如果你可以使用ssh而不是ftp。

我这样做,我不知道这是否更明确的方式。

 #! /usr/bin/perl -w use Net::FTP; open(TMPOUT, ">>","/tmp/tmpout.txt"); *STDOUT = *TMPOUT; ### Redirect STDOUT to /tmp/tmpout.txt #select TMPOUT; my ($ftp, $host, $user, $pass, $dir, $fpath); $host = "localhost"; $user = "myftpuser"; $pass = "myftppassword"; $dir = "/tmp"; $ftp = Net::FTP->new($host, Debug => 0); $ftp->login($user, $pass) || die $ftp->message; $ftp->cwd($dir); while(<STDIN>) { print $_ . "\n"; } ####Printing the STDING to /tmp/tmpout.txt $ftp->append("/tmp/tmpout.txt", "myremoteout.txt"); ### Now i append the oupout of the local file /tmp/tmpout.txt to the remote ftp file /tmp/myremoteout.txt $ftp->quit; 

现在chmod +x f.plfind / -type f | ./f.pl find / -type f | ./f.pl

在ftp服务器上输出grep "^/" /tmp/myremoteout.txt

 /usr/share/doc/gcc-4.7-base/README.Bugs /usr/share/doc/gcc-4.7-base/NEWS.html /usr/share/doc/gcc-4.7-base/changelog.Debian.gz /usr/share/doc/gcc-4.7-base/changelog.gz /usr/share/doc/gcc-4.7-base/quadmath/changelog.gz /usr/share/doc/gcc-4.7-base/test-summary.gz /usr/share/doc/gcc-4.7-base/gomp/changelog.gz /usr/share/doc/gcc-4.7-base/TODO.Debian /usr/share/doc/gcc-4.7-base/gcc/changelog.gz /usr/share/doc/gcc-4.7-base/README.ssp /usr/share/doc/gcc-4.7-base/README.Debian.amd64.gz /usr/share/doc/gcc-4.7-base/test-summaries/obj-c++.sum.gz /usr/share/doc/gcc-4.7-base/test-summaries/libmudflap.sum.gz /usr/share/doc/gcc-4.7-base/test-summaries/libgomp.sum.gz /usr/share/doc/gcc-4.7-base/test-summaries/libstdc++.sum.gz /usr/share/doc/gcc-4.7-base/test-summaries/libgo.sum.gz /usr/share/doc/gcc-4.7-base/test-summaries/go.sum.gz