アーカイブ名をフォルダー名として使用してすべての7zアーカイブを独自のフォルダーに抽出するには、次のコマンドを実行します。
7z x "*.7z" -o*
a.7z
たとえば、2つのファイルとがある場合とb.7z
フォルダがa
作成されます。これにはそれぞれとその内容が含まれます(ディレクトリ構造を保持)。b
a.7z
b.7z
時には7zアーカイブが多すぎるため、複数のコアを使用してそれらを抽出したい場合があります。私はこれを読んだ回答渡すアルトゥーンS.タシュキノフ:
7z 解凍はシングルスレッドなので、圧縮形式の制限です。
parallel
だから私の場合は7zアーカイブが複数あるのでそれを使うつもりです。
私は試した:
parallel -j4 '7z x {} -o{}' ::: *.7z
a.7z
ただし、2つのファイルとのある例に戻ると、b.7z
コマンドはa.7z
2つのファイルsumをandの代わりにsumb.7z
フォルダに抽出しようとしますa.7z
。これにより、sumがすでにインポートされていてファイルであるため、実行が中断されます。この問題をどのように解決できますか? 2つのフォルダと。b.7z
a
b
a.7z
b.7z
a
b
それが重要な場合は、Ubuntuを使用してください。
答え1
parallel
{.}
代わりに、以下を指定すると拡張機能が削除されます{}
。
parallel -j4 '7z x {} -o{.}' ::: *.7z
答え2
*
inオプションに関する注意事項です-o{dir_path}
。文書には次の内容が記載されています。
{dir_path}
これはターゲットディレクトリのパスです。 [...] 7-Zip*
で指定すると、この文字はアーカイブ名に置き換えられます。{dir_path}
*
初期コマンドの正しい構文は次のとおりです。
7z x \*.7z -o\*
つまり、2番目の項目*
もエスケープする必要があります。それ以外の場合、シェルはそれを拡張しようとします。bash
これらのオプションを使用せずに使用することもできますnullglob
。これがうまくいく理由です(一致するものが見つからず、文字通り渡します7z
)...
gnu parallel
これでコマンドを実行するには、次のように使用できます*
(上記のようにエスケープ処理)。
parallel -j4 '7z x {} -o\*' ::: *.7z
または、Stephenの答えなどの代替文字列を削除して*
使用してくださいparallel
。{.}