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



我想解压缩.gz文件,但不覆盖。当结果文件存在时,gunzip将请求覆盖权限,但我希望gunzip在默认情况下不覆盖,而只是中止。我在一篇文章中读到-f强制覆盖,但我没有发现任何关于跳过它的内容。

gunzip ${file} 

在复制cp -n ${file}时需要-n

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

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

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

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

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

这里是答案的组合,将解压缩一组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

相关内容

  • 没有找到相关文章

最新更新