2016-03-31 8 views
0

Mit php verwende ich exec("tar -xf archive.tar -C /home/user/target/folder"), um den Inhalt eines bestimmten Archivs (archive.tar) in das Zielverzeichnis (/ home/user/target/Ordner) zu extrahieren, so dass alle vorhandenen Der Inhalt des Zielverzeichnisses wird durch die neuen im Archiv enthaltenen überschrieben.Extrahieren tar Archiv außer einem bestimmten Ordner und seinen Inhalt

Es funktioniert gut und alle Dateien im Zielverzeichnis werden nach dem Extrahieren überschrieben, aber es gibt ein Verzeichnis im Archiv, das ich weglassen möchte (aus dem Extrahieren und somit das vorhandene im Zielordner überschreiben). . Zum Beispiel enthält die archiv.tar:

ordnerA/

ordnerB/

FolderC/

folderD/

fileA.php

fileB.php

fileC.xml

Wie konnte ich extrahieren (und überschreiben) Mit Ausnahme von (zum Beispiel) FolderC /? Mit anderen Worten, ich möchte, dass OrdnerC und dessen Inhalt im Verzeichnis des Benutzers intakt bleiben und nicht von dem Inhalt des tar-Archivs überschrieben werden.

Irgendwelche Vorschläge?

(Tar auf dem Hosting-Server ist GNU ver 1,23)

Antwort

2

Sie verwenden können '--exclude' einen Ordner auszulassen:

tar -xf archive.tar -C /home/user/target/folder" --exclude="folderC" 
0

Schreib --exclude='./folder' am Anfang des Befehls tar. In Ihrem Fall ist das exec("tar -x --exclude='./C' -f archive.tar -C /home/user/target/folder")

+0

Falsch. Verwenden Sie '--exclude'/nachdem Quelle und Ziel angegeben wurden. – Stuart

+0

Das hängt von der Version ab. –

0

Um auf der sicheren Seite zu sein, könnten Sie alle Schreibrechte aus dem Ordner entfernen. Zum Beispiel:

$ chmod 000 folderC/ 

Dann tun Sie eine normale Teer-Extrakt (als normaler Benutzer). Sie erhalten einige Fehlermeldungen auf der Konsole, aber Ihr Ordner bleibt unberührt .... Am Ende der tar, ändern Sie die ursprünglichen Berechtigungen des Ordners. Zum Beispiel:

$ chmod 775 folderC/ 

Natürlich ‚--exclude‘ tar-Option ist die richtige Lösung für dieses spezielle Problem, aber, wenn Sie nicht vollständig zu 100% sicher über eine Befehlssyntax sind, und yor're Handhabung kritisch Daten, meine Lösung bringt Sie auf die sichere Seite :-).

+0

Dies ist eine sehr unnötige (und schlechte Praxis) Möglichkeit, dies zu tun. Die eingebaute Methode '--exclude' existiert für genau diese Anforderung. – Stuart

+0

Wenn ich ** kritische ** Produktionsdaten handhabe, als ein verantwortlicher sysadm, schütze ich meine Aktionen immer doppelt, wenn möglich ...OP könnte also beides machen ('chmod' und' -exclude'), zum Beispiel, wenn er eine Frage auf SO stellen muss, um die Arbeit zu erledigen, was bedeutet, dass er nicht sehr erfahren ist mit dem Befehl ... – MarcoS

+0

I Ich bin besorgt, dass Ihr Vorschlag von dem, was OP fragt, ablenkt und möglicherweise weiter verwirrt - besonders wenn (wie Sie erwähnen) OP mit dem Befehl nicht allzu vertraut ist. – Stuart

Verwandte Themen