Linux命令学习五:cp、mv、rm
复制文件或目录:cp
????这个cp
可不是网上嗑的那种cp呀,而是copy,复制命令cp
。相对于windows操作系统而已,就是ctrl + c
和ctrl + v
的混合体啦。cp
命令不仅可以复制文件,还可以将整个目录及目录下的子目录和文件一并复制,是一个极为常用的命令。
基本语法
copy [参数] 原始文件 目标文件
参数说明
参数 | 说明 |
---|---|
-r | 递归复制整个文件夹 |
-f | 若目标文件已存在,则会直接覆盖原文件 |
-n | 若目标文件已存在,直接跳过,而不覆盖已存在的文件 |
-i | 若目标文件已存在,则会询问是否覆盖 |
-l | 对源文件建立硬链接,而非复制文件 |
-s | 对源文件建立软链接,而非复制文件 |
实例
????将file_1 file_2 file_3复制到dir_1目录下
cp file_{1..3} dir_1
????将hello1 复制到project_c目录下,并改名为hello4
cp file_1 project_c/file_4
????复制整个dir_1目录,复制到dir_2目录
cp -r dir_1 dir_2
????通过上面的实例,dir_1目录下已经有了file_1、file_2、file_3、file_4这4个文件了。如果再将file_1这个文件复制到dir_1目录下,看看有什么后果。
$ cp file_1 dir_1
cp:是否覆盖'dir_/file_1'?
????系统提示,目录文件已存在,询问是否要覆盖文件。输入y或者yes都会覆盖文件,输入n或者no都会跳过不覆盖文件。那么,是不是可以通过参数-f
强行覆盖目标文件呢?
$ cp file_1 dir_1
cp:是否覆盖'dir_/file_1'?
????效果还是一样呀,系统还是会询问。原来呀,cp
命令,是cp -i
的别名呀。就是说,每次都会询问,是否覆盖已存在的文件
$ alias cp
alias cp='cp -i'
????那么解决这个问题,可以把这个别名删除。或者在cp命令前面加上反斜杠\
使用原生命令进行强行覆盖。
\cp file_1 dir_1
移动文件/目录:mv
????mv命令是move的缩写,就是移动一个文件或者目录的意思啦。其实这个功能,跟windows操作系统下面的剪切功能很相似啦。但是mv命令会更加灵活,除了可以将一个文件从一个地方移动到另一个地方,还可以重命名文件。
基本语法
mv 原文件 目标文件
参数说明
参数 | 说明 |
---|---|
-f | 若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文 件或目录 |
实例
????将file_1文件重命名为file_2
mv file_1 file_2
????将file_1文件从dir_1目录移动到dir_2目录,如果dir_2目录存在同名的文件,则强行覆盖
mv -f dir_1/file_1 dir_2/
删除文件/目录:rm
????rm命令是remove的缩写,既可以删除文件,也可以删除目录(Linux下一切皆文件,目录也是一个文件嘛)。通过上面的cp
命令,知道cp
命令是cp -i
命令的缩写。同样的rm
命令也是rm -i
命令的缩写。就是每删除一个文件默认都会弹出提示,是否确定需要删除。
基本语法
rm [选项] [文件路径]文件名
参数说明
参数 | 说明 |
---|---|
-r | 递归删除目录中所有文件 |
-f | 强制删除,没有任何提示 |
-v | 显示删除执行过程 |
实例
????正如上面的参数说明,如果要删除一个文件,并不需要系统确定“是否删除”,可以加上参数-f
# 强行删除文件file1
rm -f file1
????rmdir
命令在前面也提到,可以删除一个目录,但这个目录必须是空目录,否则不能用rmdir
命令删除,但是可以用rm
命令进行删除
# 强行删除dir_1目录及其目录下所有文件和子目录
rm -rf dir_1
# 强行删除dir_1目录下的所有文件和子目录,但保留dir_1目录
rm -rf dir_1/*