在Linux终端递归下载ftp服务器某个目录的方法

假如要将ftp://127.0.0.1/pub/a/b/c/中的c目录及其内容下载到本地~/目录,即本地~/c/目录对应服务器的/pub/a/b/c目录,该如何操作呢?

方法一:使用lftp工具

cd ~
lftp 127.0.0.1
user <username> [<password>]
cd /pub/a/b
mirror c #或 mirror c ~/c
#mirror c 指把服务器c的内容镜像到本地当前目录,如果指定第二个参数(存放到的本地目录),则第一个c是指c下的所有文件,而不是c目录本身

方法二:使用wget

wget -r ftp://127.0.0.1/pub/a/b/c -P ~ -nH --cut-dirs=3
  • -r 递归下载目录下的内容
  • -P –directory-prefix 指定本地目录前缀,所有下载内容将基于该目录,不指定则为当前目录
  • -nH 不要建立以主机名命名的本地目录,默认wget下载的内容会存放于以主机名命名的子目录中
    –cut-dirs 裁剪目录前缀个数,本例中裁减掉/pub/a/b/共3个目录,这样保存到本地的目录树不会出现/pub/a/b/

bash中容易搞混的几种括号运算符

$()

取得括号内运行命令的标准输出,作为当前命令行的命令或参数,其效果和``相同。
举例:mkdir $(date +%F)

$(())

执行整数运算。作用和let相似
举例:var=$((10+20))
另一种整数运算符$[]现已被标记为过时,会在将来版本中移除。

(())

可在其中使用直观的数学比较运算符,比test命令的选项 -lt -gt等要直观。
举例:

root@debian:~# (( 1 > 0 )) && echo yes
yes
root@debian:~# (( 1 > 10 )) && echo yes
root@debian:~#

[[]]

test命令或[的增强版,bash专有扩展,在sh中不支持。可以用扩展正则表达式或通配符来比较字符串。
举例:正则表达式:

root@debian:~# [[ "123456" =~ ^[0-9]+$ ]] && echo yes
yes
root@debian:~# [[ "123456X" =~ ^[0-9]+$ ]] && echo yes
root@debian:~#

举例:通配符:

root@debian:~# [[ 'abc.txt' == abc.* ]] && echo yes
yes
root@debian:~# [[ 'abc.txt' == *.txt ]] && echo yes
yes
root@debian:~# [[ 'abc.txt' == *.jpg ]] && echo yes
root@debian:~#

经测试等号右边的模式不能用引号括起来,否则会识别失败

新装Debian 7 重启后显示 error: file ‘/boot/grub/i386-pc/normal.mod’ not found的解决办法

新机支持EFI bios,且系统是64位,会自动安装EFI版的GRUB,不管你是否启用了EFI引导。解决办法是再次启动安装镜像,并且选择”高级选项(Advanced options)“中的”救援模式(rescue mode)“,选择正确的你所安装的根分区/的设备,并进入命令行模式。
然后:

bash  #我比较喜欢用bash,默认是sh
mount -a #把没挂载的设备都挂上
aptitude -y remove grub-efi-amd64 #删除EFI版的GRUB
aptitude -y install grub-pc #安装传统PC版GRUB
rm -rf /boot/grub/*
grub-install /dev/sdX #重新初始化GRUB到启动磁盘
update-grub #重新生成启动项菜单,等同于grub-mkconfig > /boot/grub/grub.cfg

#然后重启并从硬盘引导就OK了

我的gVim配置

" 语法高亮
syntax on

" 自动缩进
set ai

" 显示行号
set nu

" tab宽度
set tabstop=4

" 不要自动备份文件
set nobackup

" 不自动换行
set nowrap

" 字体名称、高度、字符集
set gfn=Consolas:h11:cANSI:qDRAFT

" 默认文件编码
set fileencoding=utf-8

" 文件编码
set fileencodings=utf-8,cp93

" 不响应鼠标
set mouse=
set ttymouse=

" 不使用系统剪贴版
set clipboard=