35

約800個の.tgzアーカイブを含むディレクトリがあり、それぞれに約10個のファイルが含まれています。事実上、各アーカイブを同じ名前のディレクトリに変換したいと思います。これを行うための簡単な1行のコマンドはありますか、それともスクリプトを作成する必要がありますか?

4

5 に答える 5

37

GNU tar 1.28以降の更新:使用--one-top-levelhttps ://www.gnu.org/software/tar/manual/tar.html#index-one_002dtop_002dlevel_002c-summaryを参照

古いバージョンでは、これをスクリプト化する必要があります。tar -Cオプションを使用して、抽出が配置されるディレクトリを指定できます。

以下のスクリプトは、ディレクトリが存在せず、作成する必要があることを前提としています。ディレクトリが存在する場合でも、スクリプトは機能します-mkdirは単に失敗します。

tar -xvzf archive.tar.gx -C archive_dir

例えば

for a in *.tar.gz
do
    a_dir=${a%.tar.gz}
    mkdir --parents $a_dir
    tar -xvzf $a -C $a_dir
done
于 2013-02-21T17:44:17.980 に答える
11

十分に現代的なGNU tarものが考慮されている場合、これはここでのトップアンサーになるはずです:https ://unix.stackexchange.com/a/478341/34069

簡潔にするために、これは抜粋です。

tar -xvf bash.html_node.tar.gz --one-top-level

アーカイブファイル名にちなんで名付けられた新しいディレクトリにアーカイブを抽出します。

于 2019-12-10T10:52:29.277 に答える
3

このように解凍したいフォルダを作成し、mkdir archive 解凍時にフォルダ名を-Cで渡します。 tar -xvf archive.zip -C archive

于 2018-10-23T08:54:56.953 に答える
0

ファイル名を2番目のディレクトリに保持しながら、つまり完全なファイルパスとファイル拡張子なしで、1つのディレクトリから2番目のディレクトリにファイルを抽出する

%sh
for file in /mnt/dir1/*.tar.gz; 
do 
y=${file##*/}; 
z=${y%%.*}; 
mkdir -p /mnt/dir2/$z && tar -xzvf $file -C /mnt/dir2/$z;
done
于 2020-12-24T20:57:31.523 に答える
-3

さて、実行する$ tar -zxf some-archive.tar.gz -C .と(最後のドットに注意してください)、some-archive/現在いるディレクトリにという新しいディレクトリが作成されます。

多分これはあなたがあなたの質問によって意味したことですか?これは私が一般的に望んでいることなので、あなたにも役立つかもしれません。

于 2015-09-12T22:14:15.330 に答える