5. 操作文件

本文介绍:

  • cp:拷贝文件和目录
  • mv:移动和重命名文件和目录
  • rm:删除文件和目录
  • mkdir:创建目录

坦率的说,这些任务使用桌面系统很容易操作。你可以拖拽、剪切、拷贝、粘贴、删除文件。那么为什么使用这些命令呢? 答案是更强大且灵活。复杂的任务使用命令更容易完成。例如,拷贝所有 HTML 文件到另一个目录,但是只拷贝不存在目标目录或者更新版本的文件。使用文件管理器很难完成。但用命令很简单:

$ cp -u *.html destination

通配符

shell 提供了一些特殊字符来将文件归组。它们的名字叫 通配符。以下是通配符列表:

通配符 意义
* 匹配任意字符
? 匹配任意单个字符
[characters] 匹配任何属于字符集合中的字符。字符集合可以使用 POSIX 字符类,例如:
[:alnum:] 字母数字字符
[:alpha:] 字母字符
[:digit:] 数字
[:upper:] 大写字母
[:lower:] 小写字母
[!characters] 匹配任意不在字符集合中的字符

使用通配符,可以构建复杂的文件名选择模式。例如:

模式 匹配
* 所有文件名
g* 所有 g 开头的文件名
b*.txt 所有 b 开头且 .txt 结尾的文件名
Data??? 所有 Data 开头且后面有三个字符的文件名
[abc]* 所有以 a 或 b 或 c 开头且后面跟任意字符的文件名
[[:upper:]]* 所有以大写字母开头的文件名
BACKUP.[[:digit:]][[:digit:]] 所有以 BACKUP 开头且后面跟两个数字的文件名
*[![:lower:]] 所有不以小写字母结束的文件名

你可以在任意支持文件名参数的命令中使用通配符。

cp

cp 拷贝文件或目录。最简单的形式,拷贝一个文件:

$ cp file1 file2

也可以用于拷贝多个文件(以及/或目录)到一个不同的目录下:

$ cp file... directory

其他有用的 cp 示例及选项如下:

命令 结果
cp file1 file2 拷贝 file1 的内容到 file2。如果 file2 不存在,会先创建;否则,会默默将 file1 的内容覆盖到 file2
cp -i file1 file2 同上,不同的是,由于指定了 -i(interactive,交互)选项,如果 file2 存在,在覆盖前会提示
cp file1 dir1 拷贝 file1 的内容(到一个名为 file1 的文件)到目录 dir1
cp -R dir1 dir2 拷贝 dir1 目录的内容。如果 dir2 不存在,则创建。否则,在 dir2 中创建一个名为 dir1 的目录

mv

mv 命令可以移动或重命名文件和目录。重命名文件:

$ mv filename1 filename2

移到文件(和/或目录)到另一个目录:

$ mv file... directory

mv 示例及选型示例:

命令 结果
mv file1 file2 如果 file2 不存在,file1 重命名为 file2。如果 file2 存在,其内容会默默地被 file1 的内容覆盖
mv -i file1 file2 同上,不同的是,由于指定了 -i(interactive,交互)选项,如果 file2 存在,在覆盖前会提示
mv file1 file2 file3 dir1 移动 file1、file2、file3 到目录 dir1。如果 dir1 不存在,mv 会退出并报错
mv dir1 dir2 如果 dir2 不存在,dir1 重命名为 dir2。如果 dir2 存在,dir1 移动到目录 dir2

rm

rm 命令移除(删除)文件和目录。

$ rm file...

也可以用于删除目录:

$ rm -r directory...

rm 及其选项示例:

命令 结果
rm file1 file2 删除 file1 和 file2
rm -i file1 file2 同上,不同的是,由于指定了 -i(interactive,交互)选项,每个文件在删除前都会提示,输入 y 或 Y 删除
rm -r dir1 dir2 删除目录 dir1 及 dir2,以及其中的所有内容

谨慎使用 rm! Linux 没有撤销删除命令。一旦使用 rm 删除,就找不回来了。使用 rm,特别是和通配符一起使用时,删除文件可能对你的系统造成严重的损坏。 在使用 rm 和通配符前,尝试按以下方式避免误删: 使用 ls 构建你的命令。这样你可以知道将会删除哪些文件。在使用 ls 测试之后,使用向上键调用历史命令并将 ls 替换为 rm 进行删除。

mkdir

mkdir 用于创建目录。

$ mkdir directory

在命令中使用通配符

示例:

命令 结果
cp *.txt text_files 拷贝当前工作目录下以 .txt 结尾的文件到一个已存在的名为 text_files 的目录
mv my_dir ../*.bak my_new_dir 将子目录 my_dir 及父级目录下所有以 .bak 结尾的文件移动到名为 my_new_dir 的目录中
rm *~ 删除当前工作目录下所有以 ~ 结尾的文件。一些应用会用这种命名方案创建备份文件。使用此命令会将其从目录中清除

results matching ""

    No results matching ""