Linux 移动、复制和删除文件

点击访问 Linux 命令大全 >>

本章节将讨论在 Linux 中,怎样移动、复制和删除文件及目录。

mv 移动和重命名

mv 取了 move 的缩写形式。这个命令用来移动文件,下面将当前目录的 hello.txt 文件移动到 ~/tmp/data 目录下。如下:

## 查看当前目录下面的文件列表
[root@localhost ~]# ll
总用量 8
-rw-------. 1 root root 1259 7月  28 17:48 anaconda-ks.cfg
-rw-r--r--. 1 root root    6 7月  28 17:52 hello.txt
drwxr-xr-x. 3 root root   18 7月  28 17:40 tmp

## 将 hello.txt 文件移动到 ~/tmp/data/ 目录
[root@localhost ~]# mv hello.txt ~/tmp/data/

## 查看目标目录内容
[root@localhost ~]# ll ~/tmp/data/
总用量 4
-rw-r--r--. 1 root root 6 7月  28 17:52 hello.txt

mv 命令在执行过程中不会有任何提示信息。如果目标目录有一个同名文件,mv 将使用当前文件替换目标文件。这是一个非常危险的动作,可能一不小心将一些非常重要的配置文件覆盖了。

为此 mv 命令提供了 -i 选项,用于在发现有同名文件时,给出提示信息。如下:

[root@localhost ~]# mv -i hello.txt ~/tmp/data/
mv:是否覆盖"/root/tmp/data/hello.txt"? y
[root@localhost ~]#

输入“Y + 回车”表示覆盖目标文件,输入“N+回车”表示跳过这个文件。

另一个比较有用的 -b 选项,这个选项用一种不同的方式来处理文件覆盖问题。在移动文件前,首先在目标目录同名文件的文件名后加一个“~”,从而避免这个文件被覆盖。如下:

## 移动文件
[root@localhost ~]# mv -b hello.txt ~/tmp/data/
mv:是否覆盖"/root/tmp/data/hello.txt"? y

## 查看目标目录内容
[root@localhost ~]# ll ~/tmp/data/
总用量 0
-rw-r--r--. 1 root root 0 7月  28 18:10 hello.txt
-rw-r--r--. 1 root root 0 7月  28 18:06 hello.txt~

Linux 没有“重命名”这个命令,重命名无非就是将一个文件在同一个目录里移动,这是mv命令最擅长的工作。如下:

## 查看当前目录的内容
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1259 7月  28 17:48 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 7月  28 18:13 hello.txt
drwxr-xr-x. 3 root root   18 7月  28 17:40 tmp

## 重名 hello.txt 文件为 hello_bak.txt
[root@localhost ~]# mv hello.txt hello_bak.txt

## 查看结果
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1259 7月  28 17:48 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 7月  28 18:13 hello_bak.txt
drwxr-xr-x. 3 root root   18 7月  28 17:40 tmp

上面实例,将 hello.txt 重命名为 hello_bat.txt 文件。

cp 复制文件和目录

cp 命令用来复制文件和目录。例如:

## 将 hello_bak.txt 文件复制到 ~/tmp/data/ 目录
[root@localhost ~]# cp hello_bak.txt ~/tmp/data/

## 查看目标目录结果
[root@localhost ~]# ll ~/tmp/data/hello_bak.txt
-rw-r--r--. 1 root root 0 7月  28 18:25 /root/tmp/data/hello_bak.txt

和 mv 命令一样,cp 命令默认会覆盖目标目录中的同名文件。可以使用 -i 选项对重复文件给出提示,以及使用 -b 选项对同名文件改名后再复制。例如:

[root@localhost ~]# cp -i hello_bak.txt ~/tmp/data/
cp:是否覆盖"/root/tmp/data/hello_bak.txt"? n

输入 n 表示跳过这个文件。

cp 命令在执行复制任务的时候回自动跳过目录。例如:

[root@localhost ~]# cp data1/ ~/tmp/
cp: 略过目录"data1/"

如果我们需要复制目录以及其子目录下面的所有文件,则可以使用 -r 选项。例如:

[root@localhost ~]# cp -r data1/ ~/tmp/
[root@localhost ~]# ll ~/tmp/
总用量 0
drwxr-xr-x. 2 root root 62 7月  28 18:25 data
drwxr-xr-x. 2 root root 22 7月  28 22:08 data1

rmdir 和 rm 删除目录和文件

rmdir 命令用于删除目录。这个命令使用非常简单,只需要在命令后面跟上要删除的目录作为参数即可。例如:

## 创建 myData 目录
[root@localhost ~]# mkdir myData
## 删除 myData 目录
[root@localhost ~]# rmdir myData
## 查看目录是否被删除
[root@localhost ~]# ll myData
ls: 无法访问myData: 没有那个文件或目录

注意,rmdir 命令只能删除空目录。如果删除的目录非空目录,则会给出错误信息。例如:

## 查看 data1 目录的内容
[root@localhost ~]# ll data1
总用量 0
-rw-r--r--. 1 root root 0 7月  28 21:29 data.txt
## 删除 data1 目录
[root@localhost ~]# rmdir data1
rmdir: 删除 "data1" 失败: 目录非空

因此,在使用 rmdir 删除目录之前,需要将目标目录下面的所有子目录和文件删除,而删除文件则需要使用 rm 命令。

rm 命令可以一次删除一个或几个文件。例如:删除 data1 目录下面所有的 txt 文件,如下:

## 查看 data1 目录内容
[root@localhost ~]# ll data1
总用量 0
-rw-r--r--. 1 root root 0 7月  28 21:29 data.txt
-rw-r--r--. 1 root root 0 7月  28 22:15 test.txt
## 删除 data1 目录下面所有的 txt 文件
[root@localhost ~]# rm data1/*.txt

rm 命令和 mv 命令一样,在删除文件时不会做任何提示。使用 rm 命令删除的文件将永远的从文件系统消失,而且不会将删除的文件放入到“回收站”临时目录。

注意,在使用 rm 删除文件是,为了安全着想,建议使用 -i 选项,这个选项会在删除文件前给出提示。例如:

## 查看 data1 目录内容
[root@localhost ~]# ll data1
总用量 0
-rw-r--r--. 1 root root 0 7月  28 21:29 data.txt
-rw-r--r--. 1 root root 0 7月  28 22:15 test.txt
## 删除 data1 目录下面所有的 txt 文件
[root@localhost ~]# rm -i data1/*.txt
rm:是否删除普通空文件 "data1/data.txt"?y
rm:是否删除普通空文件 "data1/test.txt"?y

但是,对于只读文件,即便不使用 -i 选项,rm 命令也会对此进行提示。例如:

## 查看文件权限信息
[snow@localhost ~]$ ll
总用量 0
-r--r--r--. 1 snow snow 0 7月  28 22:30 test.txt
## 删除只读文件
[snow@localhost ~]$ rm test.txt
rm:是否删除有写保护的普通空文件 "test.txt"?n

如果你不想在删除只读文件时不给出提示,可以使用 -f 选项来实现(rm 会自动对这个问题回答 Y)。例如:

[snow@localhost ~]$ ll
总用量 0
-r--r--r--. 1 snow snow 0 7月  28 22:32 test.txt
[snow@localhost ~]$ rm -f test.txt
[snow@localhost ~]$ ll
总用量 0

如果要删除指定目录以及子目录和文件,可以使用 -r 选项,进行递归删除。例如:

## 查看 tmp 目录的树结构
[snow@localhost ~]$ tree tmp/
tmp/
├── data
│   ├── hello.txt
│   └── test.txt
└── readme.txt

1 directory, 3 files

## 递归删除 tmp 目录
[snow@localhost ~]$ rm -fr tmp/
[snow@localhost ~]$ ll
总用量 0

注意:使用 rm 命令的时候应该格外小心。特别是以 root 身份执行该命令时。

【注意】

如果你在你的 Linux 操作系统中使用 rm 或 mv 命令时,并没有带有 -i 选项,而命令依然给出了提示信息。这是因为 Linux 系统在 .bashrc 文件中将 rm -i 或 mv -i 定义成了 rm 和 mv 别名。内容如下:

# .bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

# Source global definitions

if [ -f /etc/bashrc ]; then

        . /etc/bashrc

fi

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号