web-dev-qa-db-ja.com

7zアーカイブから特定のフォルダーにフォルダーコンテンツを抽出する

私は7zアーカイブファイルを持っています。これには、「ルート」レベルで、いくつかのファイルが含まれ、次にディレクトリが含まれます。このディレクトリには、次のようにファイルとフォルダの両方が含まれます。

- file1.txt
- file2.txt
- my_dir
    - file3.txt
    - file4.txt
    - another_dir
        - file5.txt
        - file6.txt

最終的な結果が次のようになるように、選択したディレクトリ内にmy_dirの-​​contentを抽出できる単一のコマンドがあるかどうかを知りたいです。

- target_dir
    - file3.txt
    - file4.txt
    - another_dir
        - file5.txt
        - file6.txt

私はこれらのコマンドを試しました:

7za x -y archive.7z -o/path/to/target_dir my_dir
7za x -y archive.7z -o/path/to/target_dir 'my_dir/*'

しかし、どちらもこのディレクトリ構造を作成しました:

- target_dir
    - my_dir
        - file3.txt
        - file4.txt
        - another_dir
            - file5.txt
            - file6.txt
11

My_dirを指定したディレクトリに抽出できる単一のコマンドはありますか?

はい。 eの代わりにxオプションを使用します。

7za e -y archive.7z -o/path/to/target_dir my_dir

xフルパスを使用した抽出)

e(抽出)コマンド

アーカイブから現在のディレクトリまたは出力ディレクトリにファイルを抽出します。出力ディレクトリは、-o(出力ディレクトリの設定)スイッチで指定できます。

このコマンドは、抽出されたすべてのファイルを1つのディレクトリにコピーします。フルパスでファイルを抽出する場合は、x(フルパスで抽出)コマンドを使用する必要があります。

ソース e(抽出)コマンド


しかし、実際には、アーカイブ内のフォルダには、保持したいサブフォルダが含まれています

この場合、元のコマンド(xを使用)を使用し、次にmoveを使用してmy_dirのコンテンツを1つ上のレベルに移動する必要があります。

次のバッチファイルのようなもの(テストされていません):

@echo off
7za x -y archive.7z -o/path/to/target_dir my_dir
move /y my_dir\* /path/to/target_dir
rd /s my_dir
endlocal

コマンドラインから:

7za x -y archive.7z -o/path/to/target_dir my_dir && move /y my_dir\* /path/to/target_dir && rd /s my_dir

しかし、私はLinuxを使用しています!

次に、使用するコマンドは次のとおりです。

#!/bin/bash
7za x -y archive.7z -o/path/to/target_dir my_dir
mv -f my_dir/* /path/to/target_dir
rmdir my_dir

または:

7za x -y archive.7z -o/path/to/target_dir my_dir && mv -f my_dir/* /path/to/target_dir && rmdir my_dir

私よりもbashをよく知っている人なら、これはおそらく単純化できるでしょう。


参考文献

13
DavidPostill