我希望能够解压缩.gz
文件,但不希望覆盖原有文件。当解压后的文件存在时,gunzip会要求确认是否覆盖原有文件,但我希望gunzip默认不覆盖并中止解压。我在man文档中读到-f
参数可以强制覆盖原有文件,但没有找到跳过该选项的相关信息。
gunzip ${file}
我需要类似于 -n
的选项,用于复制文件 cp -n ${file}
我希望能够解压缩.gz
文件,但不希望覆盖原有文件。当解压后的文件存在时,gunzip会要求确认是否覆盖原有文件,但我希望gunzip默认不覆盖并中止解压。我在man文档中读到-f
参数可以强制覆盖原有文件,但没有找到跳过该选项的相关信息。
gunzip ${file}
我需要类似于 -n
的选项,用于复制文件 cp -n ${file}
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}"
。
这是本文和这里答案的结合,可以将一组被gz压缩的文件解压到不同的目标目录中:
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