私は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
はい。 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
次に、使用するコマンドは次のとおりです。
#!/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
をよく知っている人なら、これはおそらく単純化できるでしょう。