Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 大量文件被logrotate错误重命名,压缩n次。正确重命名它们_Bash_Shell_Awk_Find_Posix - Fatal编程技术网

Bash 大量文件被logrotate错误重命名,压缩n次。正确重命名它们

Bash 大量文件被logrotate错误重命名,压缩n次。正确重命名它们,bash,shell,awk,find,posix,Bash,Shell,Awk,Find,Posix,Logrotate对已经存在的文件进行了n次压缩并错误地重命名 命名错误的文件示例如下: v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz 我的意图是搜索每个文件(它们不一定被称为v_virtual),但我想要的是修改名称,在本例中保留主名称v_virtual,并带有日期和扩展名.gz 应该是这样的: v_virtual.log_2020-08-20.gz 该日期将是创建该文件的日期 我一直在通过使用awk、paste和其他方法将每个文件

Logrotate对已经存在的文件进行了n次压缩并错误地重命名

命名错误的文件示例如下:

v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz

我的意图是搜索每个文件(它们不一定被称为v_virtual),但我想要的是修改名称,在本例中保留主名称
v_virtual
,并带有日期和扩展名.gz

应该是这样的:

v_virtual.log_2020-08-20.gz

该日期将是创建该文件的日期

我一直在通过使用awk、paste和其他方法将每个文件按名称分开,但我希望使用一个脚本来实现,这样可以使它更快


你能帮我一下吗?

需要改进非平凡的文件名(
ls
不是最好的主意)

假设后缀模式始终为
.1.gz
,脚本将递归地循环每个文件
gunzip
,并从文件名中删除
.1
,直到只剩下一个后缀。循环完成后,创建日期将添加到文件名中

gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2 v_virtual.log.5.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1 v_virtual.log.5.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz
mv v_virtual.log.5.gz.1 v_virtual.log.5.gz

mv -b v_virtual.log.5.gz v_virtual.log_2020-08-20.gz

需要改进非平凡的文件名(
ls
不是最好的主意)

假设后缀模式始终为
.1.gz
,脚本将递归地循环每个文件
gunzip
,并从文件名中删除
.1
,直到只剩下一个后缀。循环完成后,创建日期将添加到文件名中

gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2.gz.1 v_virtual.log.5.gz.1.gz.1.gz.2.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz.2.gz
mv v_virtual.log.5.gz.1.gz.1.gz.2 v_virtual.log.5.gz.1.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz.1.gz
mv v_virtual.log.5.gz.1.gz.1 v_virtual.log.5.gz.1.gz
gzip -d v_virtual.log.5.gz.1.gz
mv v_virtual.log.5.gz.1 v_virtual.log.5.gz

mv -b v_virtual.log.5.gz v_virtual.log_2020-08-20.gz

您可以使用
sed
rename
命令(如果它是基于perl的)搜索
.gz
及其后的所有内容,并将其替换为
.gz
我不知道gzip没有针对双重压缩的检查。您可以使用
sed
rename
命令(如果它是基于perl的)要搜索
.gz
及其后的所有内容并将其替换为
.gz
,我不知道gzip没有针对双重压缩的检查