有一堆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[=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的规则去移动。
备份的时候,在文件名后面加个后缀~,后缀可以使用--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
使用数字序号备份,好处是有多个备份。
创建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~