So tarnen Sie mehrere Ordner, einige rekursiv, einige nicht rekursiv

So tarnen Sie mehrere Ordner, einige rekursiv, einige nicht rekursiv

Ich habe eine Liste von Verzeichnissen. Einige der Verzeichnisse müssen rekursiv tariert werden, andere erfordern nur die in diesem Verzeichnis vorhandenen Dateien, keine Unterverzeichnisse: Wie würde mein Tar-Befehl am Beispiel des folgenden Verzeichnisses/der folgenden Dateien aussehen:

/tmp/dir1/ - Recursively
/tmp/dir2/ - Only the files that exist in that directory, no subdirectories
/tmp/dir3/file1 - Only this single file.

Antwort1

Folgendes ist dabei herausgekommen:

Zunächst die Verzeichnisstruktur, die ich als Beispiel verwende:

$ find dir1 dir2 dir3 -print
dir1
dir1/file1
dir1/file2
dir1/sub_dir1
dir1/sub_dir1/file1
dir2
dir2/file1
dir2/file2
dir2/sub_dir1
dir2/sub_dir1/file1
dir3
dir3/file1
$

Als nächstes meine Lösung, die aus drei Befehlen besteht:

Erster Befehl:

tar cvf archive.tar dir1

Ziemlich normal. Lassen Sie es uns aufschlüsseln:

  • c- Erstellen
  • v- Ausführlich (mal sehen, was los ist)
  • f- der gewünschte Dateiname, in unserem Fallarchive.tar
  • archive.tar- das eigentliche Argument für unseren fSchalter
  • dir1- was wir eigentlich teeren wollen

Zweiter Befehl:

find dir2 -maxdepth 1 -type f -print0 | xargs -0 tar rvf archive.tar

Lassen Sie es uns aufschlüsseln:

  • find dir2- Wo wir suchen möchten.
  • -maxdepth 1- Gehen Sie nicht tiefer als bis zu einer Tiefe von 1 (bleiben Sie an der Wurzel von dir2).
  • -type f- Suche nach Dateien
  • -print0- Drucken Sie am Ende kein Zeilenumbruchzeichen aus, sondern verwenden Sie stattdessen ein Nullzeichen. Dies hilft uns, wenn find Dateien mit Leerzeichen findet.
  • | xargs -0- Die Standardeingabe, die wir mit dem Befehl find gefunden haben, wird hier ausgegeben, um ausgeführt zu werden, unter Berücksichtigung unsererprint0
  • tar rvf- Der einzige neue Schalter hier ist r. Dies ist unsere Anhängeoption. Sie fügt archive.taram Ende unser hinzu. Nicht zu verwechseln mit der AOption, die speziell für das Anhängen zusätzlicher Archive gilt ( .tar-s).
  • archive.tar- Der Teer, an den wir anhängen möchten.

    Am Ende dieses Befehls wird unser Standardeingang verwendet. zBarchive.tar <stdinput>

Dritter Befehl:

tar rvf archive.tar dir3/file1

archive.tarAn eine einzelne Datei anhängen ( file1) von dir3.

Und schließlich, wie das Tar nach seiner Erstellung aussieht. Die tOption wird verwendet, um seinen Inhalt auszudrucken.

$ tar tvf archive.tar
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file2
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file2
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir3/file1
$

verwandte Informationen