Ich habe ein Verzeichnis, /Landsat_Data/
welche Verzeichnisse enthält ( Landsat_Data/Site1
, Landsat_Data/Site2
usw.). Jedes Unterverzeichnis enthält .tar.gz
Dateien (z. B. /Landsat_Data/Site2/LE70930862008092-SC20160107074735.tar.gz
usw.) und jede .tar.gz
Datei enthält TIF- oder XML-Dateien wie thisL
-rw-r--r-- espa/ie 29952 2016-01-07 14:57 LT50930861991021ASA00_sr_snow_qa.tif
Ich möchte jede TAR-Datei in ein eigenes Unterverzeichnis entpacken (z Landsat_Data/Site2/LE70930862008092-SC20160107074735/
. B. ).
Bisher verwende ich diese Befehlszeile als Landsat_Data-Verzeichnisse:
find . -type f -name "*.tar.gz" -execdir tar -xvzf {} \;
Dieser Befehl extrahiert jedoch alle tif- und xml-Dateien in jedes Unterverzeichnis (z. B. Landsat_Data/Site2
), während ich nur das entpacken möchte LE70930862008092-SC20160107074735.tar.gz
, um ein Unterverzeichnis namens zu haben, LE70930862008092-SC20160107074735
das alle tif- und xml-Dateien enthält. Irgendeine Idee, wie ich erreichen kann, was ich will?
tar -tvf
einer TAR-Datei sehen? Es scheint auch, dass Ihr Unterordner eine weitere Ordnerstruktur hat. Können wir auch ein Beispiel dafür sehen?Antworten:
Versuchen
gemäß
man find
quelle
Hier ist eine Möglichkeit (dies setzt voraus, dass Sie Bash verwenden):
Mit dieser
globstar
Option werden**
0 oder mehr Dateien und Verzeichnisse rekursiv abgeglichen, sodass/Landsat_Data/**/*.tar.gz
alle*tar.gz
Dateien in einem beliebigen Unterverzeichnis von übereinstimmen/Landsat_Data/
. Derdirname
Befehl gibt den Verzeichnisnamen seiner Eingabe undbasename
nur den Namen mit der von Ihnen angegebenen Erweiterung aus (hiertar.gz
entfernt. So zum Beispiel:Das
--one-top-level
wird erklärt inman tar
:Zusammengenommen wird dies tun, was Sie wollen.
Wenn Sie
tar
diese Option nicht haben, können Sie dies manuell tun:quelle
tar
Version. Wie auch immer, siehe aktualisierte Antwort.