How to gunzip without overwriting non-interactively
Pergunta
I want to unzip .gz
files but without overwriting. When the resulting file exists, gunzip will ask for permission to overwrite, but I want gunzip not to overwrite by default and just abort. I read in a man that -f
force overwriting, but I haven't found nothing about skipping it.
gunzip ${file}
I need something like -n
in copying cp -n ${file}
Solução
Granting your files have .gz
extensions, you can check if the file exists before running gunzip
:
[[ -e ${file%.gz} ]] || gunzip "${file}"
[[ -e ${file%.gz}
]] removes .gz
and checks if a file having its name exists. If not (false), ||
would run gunzip "${file}"
.
Outras dicas
gunzip
will prompt you before overwriting a file. You can use the yes
command to automatically send an n
string to the gunzip
prompt, as shown below:
$ yes n | gunzip file*.gz
gunzip: file already exists; not overwritten
gunzip: file2 already exists; not overwritten
Here's a combination of the answers here and this that will unzip a group of gzipped files to a different destination directory:
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