我知道我可以在 ftp 服务器上运行 ls * 并获取所有内容,但对于我的终端来说,内容太多了(到目前为止有数百页)。使用 ls * > myfile 不是一个选项,因为我没有写入权限。所以我需要一种从终端执行此操作的方法,例如:ftp ftp://site.com
我已阅读手册页,但不想在这里冒险。我没有个人权限来修改此服务器,但我被授予的用户可能有写入权限。
我需要将其导出为任何本地格式,以便我可以随时查看,因为很多的输出。
答案1
答案2
一个好的选择可能是将输出导入到 less 中:
ls * | less
然后,您应该能够愉快地滚动浏览输出页面,而不需要任何文件写入权限。
答案3
关于什么:
ncftpls -R ftp://site.com
很好的命令,专为此目的而设计
答案4
我刚刚为此目的编写了一个 python 脚本: https://gist.github.com/eadmaster/55d1508bd17780ee1e93c15609bb69af
#!/usr/bin/env python
# code derived from https://gist.githubusercontent.com/flibbertigibbet/8165881/raw/7f580b6735ad1f03c6e6060cd1c8571048afad6a/recurse_ftp.py
from ftplib import FTP
from time import sleep
import os
import sys
my_dirs = [] # global
curdir = '' # global
PROGRAM_NAME = os.path.basename(sys.argv[0])
if len(sys.argv) <= 1 or sys.argv[1].startswith("-"):
print("usage: " + PROGRAM_NAME + " SERVER_ADDR [SERVER_ROOT_DIR]")
sys.exit(1)
# else
SERVER_ADDR = sys.argv[1]
SERVER_ROOT_PATH = "/"
if len(sys.argv) >= 3:
SERVER_ROOT_PATH = sys.argv[2]
def get_dirs(ln):
global my_dirs
cols = ln.split(' ')
objname = cols[len(cols)-1] # file or directory name
if ln.startswith('d'):
my_dirs.append(objname)
else:
print(curdir + "/" + objname)
def check_dir(adir):
global my_dirs
global curdir
my_dirs = []
gotdirs = [] # local
try:
curdir = ftp.pwd()
sys.stderr.write(PROGRAM_NAME + ": going to change to directory " + adir + " from " + curdir + "\n")
ftp.cwd(adir)
curdir = ftp.pwd()
ftp.retrlines('LIST', get_dirs)
except:
return
print(curdir + "/")
gotdirs = my_dirs
#print("found in " + adir + " directories:")
sleep(0.5)
for subdir in gotdirs:
if(subdir.startswith(".")):
continue
my_dirs = []
check_dir(subdir) # recurse
# end for
ftp.cwd('..') # back up a directory when done here
# end of check_dir
# main
try:
ftp = FTP(SERVER_ADDR)
ftp.login()
check_dir(SERVER_ROOT_PATH) # directory to start in
except:
import logging
logging.exception("")
ftp.quit()
ftp.quit()