約800個の.tgzアーカイブを含むディレクトリがあり、それぞれに約10個のファイルが含まれています。事実上、各アーカイブを同じ名前のディレクトリに変換したいと思います。これを行うための簡単な1行のコマンドはありますか、それともスクリプトを作成する必要がありますか?
5 に答える
GNU tar 1.28以降の更新:使用--one-top-level
、https ://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
十分に現代的なGNU tar
ものが考慮されている場合、これはここでのトップアンサーになるはずです:https ://unix.stackexchange.com/a/478341/34069
簡潔にするために、これは抜粋です。
tar -xvf bash.html_node.tar.gz --one-top-level
アーカイブファイル名にちなんで名付けられた新しいディレクトリにアーカイブを抽出します。
このように解凍したいフォルダを作成し、mkdir archive
解凍時にフォルダ名を-Cで渡します。
tar -xvf archive.zip -C archive
ファイル名を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
さて、実行する$ tar -zxf some-archive.tar.gz -C .
と(最後のドットに注意してください)、some-archive/
現在いるディレクトリにという新しいディレクトリが作成されます。
多分これはあなたがあなたの質問によって意味したことですか?これは私が一般的に望んでいることなので、あなたにも役立つかもしれません。