linux命令mv – 移动或修改文件名

linux命令mv – 移动文件位置或修改文件名

语法

mv [OPTION]… [-T] SOURCE DEST

mv [OPTION]… SOURCE… DIRECTORY

mv [OPTION]… -t DIRECTORY SOURCE…

功能

linux中mv可以移动文件的位置,即从一个目录移动到另外一个目录。 如果在同一个目录里移动,就是重新命名了。

参数

-b
–backup的简单模式不接受参数
–backup[=CONTROL]
如果目标文件存在,覆盖前,给被覆盖的文件创建一个备份。
-f
强制覆盖,不给用户提示确认的机会。有一定得危险性,同时也是很方便的。
-i
使用交互的方式,比如一个文件要被覆盖,提示下用户怎么操作。
-n
使用这个参数文件不会被覆盖

示例


# 修个目录名字
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=备份模式,三种模式

  1. none 和 off 不进行备份
  2. number 和 t 使用数字,知道是第几次被覆盖。(看上后面示例)
  3. 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


发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注