Finden Sie heraus, ob die Datei komprimiert ist oder nicht

Finden Sie heraus, ob die Datei komprimiert ist oder nicht

Ich muss herausfinden, ob die Datei im Skript komprimiert ist oder nicht. Wenn sie komprimiert ist, muss ich sie uncompressals senden attachement. Mein Suchbefehl ergibt zwei Dateien sum12.pdf.Zund sum23.pdf.Zmein Skript ist

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]

als ich dieses Skript ausführte, erhielt ich einen Fehler wie

 ${file: -1}: 0403-011 The specified substitution is not valid for this command.

Ich benutze ksh.

Antwort1

Das Dateinamenssuffix nach dem letzten Punkt kann mit angegeben werden ${file##*.}.

In diesem Fall würde ich allerdings in Erwägung ziehen, die Dekomprimierung und die UUencoding-Datei find -execdirekt wie folgt durchzuführen:

#!/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 {} +

Auf diese Weise würden Sie Pfadnamen mit Leerzeichen und anderen problematischen Zeichen unterstützen. Das sh -cSkript speichert die unkomprimierten Dateien auch nicht, sondern dekomprimiert sie, uuencodiert sie und sendet sie in einem Durchgang.

Ich habe auch die Handhabung gzipkomprimierter Dateien hinzugefügt.

Verwandt:


Alternative Implementierung des sh -cSkripts mit case ... esacanstelle mehrerer if„and elif“-Anweisungen.

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 {} +

verwandte Informationen