电脑技术学习

对话 UNIX,第 13 部分: 另外十种命令行组合

dn001

  可以针对您常用的其他命令使用 type:

$ type -a vi
vi is an alias for pico
vi is /usr/bin/vi
$ type -a cd
cd is a shell builtin
cd is /usr/bin/cd

  type 命令显示出,vi 实际上是 pico 的别名。type 命令还显示出,cd 是一个内置的命令,并且与外部命令 /usr/bin/cd 是相同的。

  使得 find 命令具有更好的可移植性

  去年曾经介绍了许多关于 find 的使用的内容,但是我忽略了其中的一个选项,它使得 find 命令行可以移植到其他操作系统。

  通常,Unix® 系统中很少使用带空格的文件名。然而,在 Mac OS X 和 Microsoft® Windows® 中常常使用更长的、更具描述性的文件名,并且在 UNIX 中它们也变得越来越多,这是因为该操作系统不断地积聚更多的桌面特性。毕竟,将一份报告保存为 2007 Business Plan 明显要比 bizplan07.ooo 好得多。

  find 命令使用嵌入的特殊字符列举长文件名,但是,如果您希望将 find 与另一个命令组合使用,那么最安全的方法是,使用 NUL 字符(而不是空格)分隔列表中的每个文件名。让我们来了解其中的差异。

  我们假设您拥有三个文件夹,其中一个或者多个目录的名称中包含空格:

$ ls -1
Business Plan 2007
Expense Report
Pictures from Spain

  如果您对大量的文件运行 find 命令,并且将结果列表传递给 xargs,那么文件名中的空格将会导致错误:

$ find . -type f -print | xargs ls -1
ls: ./Business: No such file or Directory
ls: ./Expense: No such file or directory
ls: ./Pictures: No such file or directory
ls: 2007: No such file or directory
ls: Plan: No such file or directory
ls: Report: No such file or directory
ls: Spain: No such file or directory
ls: from: No such file or directory

标签: