ILD

mv使用--backup选项不覆盖文件,而是发生冲突后重命名
作者:Yuan Jianpeng 邮箱:yuanjianpeng@xiaomi.com
发布时间:2022-2-28 站点:Inside Linux Development

有一堆kernel panic日志,存放在不同的目录,panic的文件名是固定格式的,如:1.panic.log。


现在对panic 日志进行分类,并移到类型对应的文件夹:

$ grep -nrl "Unable to handle kernel paging request at virtual" all | xargs mv -t invalid_addr/


grep的-l选项,打印出包含匹配内容的文件路径。然后使用xargs mv移动到一个目录。但是发生了错误:

mv: will not overwrite just-created 'invalid_addr/491.panic.log' with 'all/51-77/kernel-panic-2022-02-10-GBkdbG/491.panic.log'


原因是两个设备的有相同的panic日志文件名,mv的时候,会覆盖,mv给出了警告。我们只需要保存日志文件,而日志文件叫什么名字无关紧要,因此可以使用 --backup=numbered 选项,来发生冲突的时候,通过数字编号,解决冲突。


backup选项说明


       --backup[=CONTROL]

              make a backup of each existing destination file


       The  backup  suffix  is  '~',  unless  set  with  --suffix or SIMPLE_BACKUP_SUFFIX.  

       The version control method may be selected via the --backup option 

       or through the VERSION_CONTROL environment variable.  Here are the values:


       none, off

              never make backups (even if --backup is given)


       numbered, t

              make numbered backups


       existing, nil

              numbered if numbered backups exist, simple otherwise


       simple, never

              always make simple backups


注意备份的时候,是备份旧文件。新文件还是按照mv的规则去移动。


simple backup

备份的时候,在文件名后面加个后缀~,后缀可以使用--suffix选项指定。这种方式只有一个备份。


创建a b c 3个文件

$ echo a > a

$ echo b > b

$ echo c > c

将b移到a

$ mv --backup=simple b a


结果a备份为a~,b变成a

$ ls

a  a~  c

$ cat a

b

$ cat a~

a


将c移到a

$ mv --backup=simple c a


结果b备份为a~,原来的a被覆盖,c变成a。

$ ls

a  a~

$ cat a

c

$ cat a~

b


numbered backup

使用数字序号备份,好处是有多个备份。


创建3个文件a b c

$ echo a > a

$ echo b > b

$ echo c > c


移动b c到a

$ mv --backup=numbered b a

$ mv --backup=numbered c a


结果a和b为备份文件

$ ls

a  a.~1~  a.~2~



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.