【问题标题】:How to gunzip without overwriting non-interactively如何在不以非交互方式覆盖的情况下进行压缩
【发布时间】:2014-06-03 09:46:36
【问题描述】:

我想解压缩 .gz 文件但不覆盖。当生成的文件存在时,gunzip 将请求覆盖权限,但我希望 gunzip 默认情况下不覆盖并中止。我在一个人那里读到-f 强制覆盖,但我没有发现任何关于跳过它的信息。

gunzip ${file} 

我需要-n 之类的东西来复制cp -n ${file}

【问题讨论】:

  • 你的问题不是很清楚。默认情况下,gunzip 不会覆盖现有文件。
  • 默认询问是否覆盖
  • 好的,所以您想要不覆盖的非交互式 gunzip?
  • 如果是这样,konsolebox 的答案会很好......如果它可以满足您的需求,您可以接受它。如果没有,请让您的问题更清楚
  • 是的,他的回答没问题,但我必须等待 5 分钟才能接受;)

标签: bash gunzip


【解决方案1】:

gunzip 会在覆盖文件之前提示您。可以使用yes命令自动发送n字符串到gunzip提示符,如下图:

$ yes n | gunzip file*.gz
gunzip: file already exists;    not overwritten
gunzip: file2 already exists;    not overwritten

【讨论】:

    【解决方案2】:

    授予您的文件具有.gz 扩展名,您可以在运行gunzip 之前检查文件是否存在:

    [[ -e ${file%.gz} ]] || gunzip "${file}"
    

    [[ -e ${file%.gz} ]] 删除.gz 并检查是否存在与其名称相同的文件。如果不是 (false),|| 将运行 gunzip "${file}"

    【讨论】:

      【解决方案3】:

      这里的答案和this 的组合会将一组 gzip 文件解压缩到不同的目标目录:

      dest="unzipped"
      for f in *.gz; do
        STEM=$(basename "${f}" .gz)
        unzipped_name="$dest/$STEM"
        echo ''
        echo gunzipping $unzipped_name
        if [[ -e $unzipped_name ]]; then
          echo file exists
        else
          gunzip -c "${f}" > $unzipped_name
          echo done
        fi
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 2017-02-25
        相关资源
        最近更新 更多