8

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

gunzip ${file} 

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

4

3 回答 3

25

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

$ yes n | gunzip file*.gz
gunzip: file already exists;    not overwritten
gunzip: file2 already exists;    not overwritten
于 2014-06-03T10:02:35.293 回答
8

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

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

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

于 2014-06-03T09:51:31.283 回答
3

这是此处的答案的组合,会将一组 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
于 2016-11-03T17:02:15.490 回答