Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Unix-为其他环境准备转储文件_Unix_Sed_Gzip_Gunzip - Fatal编程技术网

Unix-为其他环境准备转储文件

Unix-为其他环境准备转储文件,unix,sed,gzip,gunzip,Unix,Sed,Gzip,Gunzip,我和我的一个朋友在做一个项目,我们安装了两个系统,一个用于生产,一个用于测试。开发环境使用与生产环境相同的数据库名称,因此我可以直接在那里导入转储,但由于测试环境使用另一个数据库名称托管,我必须更改转储文件中的名称 由于转储文件很大,而且我太懒了,所以我希望有一个脚本或一行命令 解压缩特定文件夹中最新的*.gz文件 将所有发生的db1替换为db2 使用与1中相同的文件名压缩sql文件。但是后缀是“test_uz”(或其他任何东西) 脚本运行后,我希望有原始转储文件和测试环境的新转储文件。我不需要

我和我的一个朋友在做一个项目,我们安装了两个系统,一个用于生产,一个用于测试。开发环境使用与生产环境相同的数据库名称,因此我可以直接在那里导入转储,但由于测试环境使用另一个数据库名称托管,我必须更改转储文件中的名称

由于转储文件很大,而且我太懒了,所以我希望有一个脚本或一行命令

  • 解压缩特定文件夹中最新的*.gz文件
  • 将所有发生的db1替换为db2
  • 使用与1中相同的文件名压缩sql文件。但是后缀是“test_uz”(或其他任何东西)
  • 脚本运行后,我希望有原始转储文件和测试环境的新转储文件。我不需要解压缩sql文件,只需要拉链。直到现在我才想出了类似的办法

    gunzip -c `ls -t *.gz | head -1` | sed -i 's/db1/db2/g' `ls -t *.sql | head -1` | gzip `ls -t *.sql | head -1` test_`ls -t *.gz | head -1`
    
    但我总是以sed抱怨找不到输入文件而告终


    有人能帮我吗?如前所述,我不在乎它是脚本还是使用管道的单行命令,只要它可以工作;-)

    我建议您不要使用旧的和不推荐的back tics。这使得这句话很难读。请使用这样的括号:
    gunzip-c$(ls-t*.gz | head-1)| sed-i's/db1/db2/g'$(ls-t*.sql | head-1)| gzip$(ls-t*.sql | head-1)test$(ls-t*.gz | head-1)
    我不知道backtips不受欢迎,我真的很感激
    sed-i
    在管道上没有多大意义。您是否认为
    -i
    不区分大小写还是什么?它告诉sed就地编辑输入文件。因此,它抱怨没有输入文件,只有一个管道。