![Descubra se o arquivo está compactado ou não](https://rvso.com/image/38697/Descubra%20se%20o%20arquivo%20est%C3%A1%20compactado%20ou%20n%C3%A3o.png)
Preciso descobrir se o arquivo está compactado ou não no script. Se estiver compactado preciso uncompress
enviar como attachement
. Meu comando find resulta em dois arquivos sum12.pdf.Z
e sum23.pdf.Z
meu script é
dir=/home/as1234/bills
cd $dir
for file in `find . -ctime -1 -type f -name "Sum*pdf*"`
do
if [ ${file: -1} == "Z" ]; then
echo "$file is Zipped"
uncompress $file
uuencode $file
fi
done
uuencode $file $file | mailx -s "subject" [email protected]
quando executei este script, recebi um erro como
${file: -1}: 0403-011 The specified substitution is not valid for this command.
Estou usando ksh
.
Responder1
O sufixo do nome do arquivo após o ponto final pode ser obtido com ${file##*.}
.
Nesse caso, porém, eu consideraria fazer a descompactação e a codificação find -exec
diretamente assim:
#!/bin/sh
dir=/home/as1234/bills
find "$dir" -type f -ctime -1 -name "Sum*.pdf*" -exec sh -c '
for pathname do
filename=$( basename "${pathname%.pdf*}.pdf" )
if [ "${pathname##*.}" = "Z" ]; then
uncompress -c "$pathname"
elif [ "${pathname##*.}" = "gz" ]; then
gzip -cd "$pathname"
else
cat "$pathname"
fi |
uuencode "$filename" |
mailx -s "subject ($filename)" [email protected]
done' sh {} +
Dessa forma, você suportaria nomes de caminhos com espaços e outros caracteres problemáticos. O sh -c
script também não armazena os arquivos descompactados, mas os descompacta, codifica-os e os envia de uma só vez.
Também adicionei o tratamento de gzip
arquivos compactados.
Relacionado:
Implementação alternativa do sh -c
script usando instruções e case ... esac
em vez de múltiplas .if
elif
find "$dir" -type f -ctime -1 -name "Sum*.pdf*" -exec sh -c '
for pathname do
filename=$( basename "${pathname%.pdf*}.pdf" )
case $pathname in
*.Z) uncompress -c "$pathname" ;;
*.gz) gzip -cd "$pathname" ;;
*) cat "$pathname"
esac |
uuencode "$filename" |
mailx -s "subject ($filename)" [email protected]
done' sh {} +