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 *~ | 删除当前工作目录下所有以 ~ 结尾的文件。一些应用会用这种命名方案创建备份文件。使用此命令会将其从目录中清除 |