如何在不进行非交互式覆盖的情况下进行gunzip

时间:2014-06-03 09:46:36

标签: bash gunzip

我想解压缩.gz个文件,但不会覆盖。当生成的文件存在时,gunzip将要求允许覆盖,但我希望gunzip默认情况下不会覆盖并且只是中止。我读了一个-f强制覆盖的人,但我没有发现任何关于跳过它的内容。

gunzip ${file} 

我需要-n这样的内容来复制cp -n ${file}

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:1)

以下是这里的答案和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