2016-11-21 2 views
0

Ich habe eine tar-Datei zu manipulieren, und ich möchte testen, ob eine Datei vorhanden ist, bevor das Extrahieren eseine Datei in einem tar-Archiv Test

Sagen wir, ich habe eine TAR-Datei namens archiv.tar und nach

Eingabe
tar -tvf Archive.Tar 

ich:

-rwxrwxrwx guy/root   1502 2013-10-02 20:43 Directory/File 
-rwxrwxrwx guy/root   494 2013-10-02 20:43 Dir/SubDir/Text 
drwxrwxrwx guy/root    0 2013-10-02 20:43 Directory 

I Text in meinem Arbeitsverzeichnis extrahieren möchten, aber ich will sicher sein, dass es tatsächlich eine Datei, indem sie diese:

if [ -f Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

Das Ergebnis dieses Tests ist immer KO und ich verstehe wirklich nicht, warum, irgendwelche Vorschläge?

+0

Wie testen Sie das, bevor Sie es extrahieren? Das heißt, was ist 'Dir/Sub/Text', wenn Sie nichts extrahiert haben? Es ist unklar, wie die genaue Abfolge der Schritte ist. – kaylum

+0

In einem Skript, das ich schreibe, muss ich testen, dass 'Dir/Sub/Text' eine Datei ist, bevor es mit' tar -xvf Archive.tar Dir/Sub/Text' entpackt wird, sorry dafür, dass ich nicht explizit genug bin – AlexT

+0

Ich weiß das musst du tun. Aber wie erwarten Sie, dass das von Ihnen gezeigte Skript funktioniert, nachdem '-f' einen Pfad getestet hat? Sie können einen Pfad nicht testen, der nicht existiert (da Sie ihn nicht extrahiert haben). – kaylum

Antwort

-1

Dies könnte eine Lösung,

tar -tvf Archive.Tar | grep Dir/Sub/Text 

So können Sie sein, ob es die Datei finden.

+0

Wie sagt Ihnen das, dass es sich um eine Datei und kein Verzeichnis handelt? – kaylum

0

Getestet mit BSD und GNU-Versionen von tar, in der Ausgabe von tar tf, Einträgen, die mit / Verzeichnisse beenden sind. So zu testen, ob Dir/Sub/Text eine Datei oder ein Verzeichnis im Archiv ist, Sie können einfach mit voller Leitungsanpassung grep:

if tar tf Archive.Tar | grep -x Dir/Sub/Text >/dev/null 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

Wenn das Archiv Dir/SubDir/Text/ enthält, dann ist Dir/SubDir/Text ein Verzeichnis, und die grep nicht überein Also wird KO gedruckt.

Wenn das Archiv Dir/SubDir/Text ohne Hinter / enthält dann ist Dir/SubDir/Text eine Datei und die grep wird übereinstimmen, werden so OK gedruckt werden.

0
if [ ! -d Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

wird KO nur zurück, wenn ein Verzeichnis Text existiert und in Ordnung sein, wenn es eine Datei ist oder nicht existiert (oder um genau zu sein auch in Ordnung, wenn es ein symbolischer Link wäre).

Verwandte Themen