linux命令mv – 移动文件位置或修改文件名
语法
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
功能
linux中mv可以移动文件的位置,即从一个目录移动到另外一个目录。 如果在同一个目录里移动,就是重新命名了。
参数
–backup的简单模式不接受参数
如果目标文件存在,覆盖前,给被覆盖的文件创建一个备份。
强制覆盖,不给用户提示确认的机会。有一定得危险性,同时也是很方便的。
使用交互的方式,比如一个文件要被覆盖,提示下用户怎么操作。
使用这个参数文件不会被覆盖
示例
# 修个目录名字
mv dir1 dir2
mv dir2/ dir1 # 加不加 / 都可以
# 修改文件的名字
mv a.txt b.txt # 把文件a.txt 修改成 b.txt
# 一次移动三个文件到 /backup 目录下
mv a.txt b.txt c.txt /backup
# 当前目录里的所有 `.txt` 移动到 /bcakup 目录下
mv *.txt /backup
说明
参数 `f`,`i`,`n`
这个三个参数,如果同时使用,只有最后一个有效果。 f — 强制覆盖, i — 交互模式 n — 不创建新的文件
给目标文件做一个备份
试想, 如果 执行
mv -f a.txt b.txt
这个时候 文件 b.txt 已经存在, 执行这条命令后原来的b.txt 就不存了。 所以说 -f 这个命令有点危险。 如果能覆盖 b.txt 之前,创建个 b.txt的备份文件就好了。 -b, –backup 就是解决这个问题的。
#创建文件a.txt 内容是空的。
touch a.txt
# 创建一个文件 b.txt, 内容是 'abc'
echo "abc" > b.txt
# 文件 b.txt 被覆盖前进行备份
mv -fb a.txt b.txt
查看一下结果
ls
b.txt b.txt~
# 这里可以看到 a.txt 已经不存在了,多了一个 b.txt~ 这个就是备份的文件
使用自己制定的后缀备份
我们看到到文件 b.txt~ 后面多了一个 ~
, 这个东西是可以制定的。使用参数-S
# 同时创建两个文件
touch a.txt b.txt
mv -fS.backup a.txt b.txt
ls
#输出的结果
ls
b.txt b.txt.backup
更有意思的用法 , 使用时间作为后缀
[linuxjia@com] touch a.txt b.txt
[linuxjia@com] mv -fS`date "+%F"` a.txt b.txt
[linuxjia@com] ls
b.txt b.txt2016-02-24
这种功能用来按天来处理的日志就方便多了。
备份的模式, 也就是 –backup=备份模式,三种模式
- none 和 off 不进行备份
- number 和 t 使用数字,知道是第几次被覆盖。(看上后面示例)
- existing 和 nil 简单的备份, 仅仅以一个备份。 (看上后面示例)
不备份
[linuxjia@com] touch a.txt b.txt
# 执行命令,没有提示直接覆盖,这个就是不进行备份, 即使使用 -b 也没用
[linuxjia@com] mv --backup=none -b a.txt b.txt
[linuxjia@com] ls
b.txt
使用数字,知道被覆盖了几次
[linuxjia@com] touch a.txt b.txt c.txt d.txt
[linuxjia@com] ls
a.txt b.txt c.txt d.txt
[linuxjia@com]
[linuxjia@com] mv --backup=t -f a.txt d.txt
# 这里出现了1
[linuxjia@com] ls
b.txt c.txt d.txt d.txt.~1~
[linuxjia@com] mv --backup=t -f b.txt d.txt
# 这里出现了2
[linuxjia@com] ls
c.txt d.txt d.txt.~1~ d.txt.~2~
[linuxjia@com] mv --backup=t -f c.txt d.txt
#这里出现了3
[linuxjia@com] ls
d.txt d.txt.~1~ d.txt.~2~ d.txt.~3~
简单处理备份
这备份没有 -t 方式复杂, 仅仅保留一份,不会保留每一个备份
# 创建四个文件
[linuxjia@com] touch a.txt b.txt c.txt d.txt
[linuxjia@com] ls
a.txt b.txt c.txt d.txt
[linuxjia@com]
# 执行这个命令后发现,简单的做个备份
[linuxjia@com] mv --backup=existing a.txt d.txt
[linuxjia@com] ls
b.txt c.txt d.txt d.txt~
# 文件少了一个, 是 d.txt~ 被覆盖了吗?
[linuxjia@com] mv --backup=existing b.txt d.txt
[linuxjia@com] ls
c.txt d.txt d.txt~
# 验证猜想, 把内容写入 d.txt 中。
[linuxjia@com] echo 'ddddd' > d.txt
[linuxjia@com] mv --backup=existing c.txt d.txt
[linuxjia@com] ls
d.txt d.txt~
# 出现这个就表示,猜想是对的。
[linuxjia@com] cat d.txt~
ddddd