質問: コマンドラインツール「unzip」を使用して特定のフォルダのみを取得するにはどうすればよいですか? コマンドラインツール「unzip」で開くことができる.jarファイルがあります。このファイルには-pというオプションがあり、特定のファイルを取得できます。しかし、フォルダを使用してこれをどのように行うのですか?このjarファイルの構造は次のとおりです。my.jar |-folder | |-content | |-my files | |-first folder | |-second folder | |-files |-image.png |-foo.class |-bar.class 取得したいフォルダ「フォルダ」にも、「マイファイル」や「ファイル」以外にもたくさんのファイルがあります。私が試したコマンド:unzip dir/to\ a\ folder/my.jar -d dir/to\ a/desired\ folder -p folder/ | image.png他のファイルなし:unzip dir/to\ a\ folder/my.jar -d dir/to\ a/desired\ folder -p folder/jarコマンドでこれを試しましたが、うまくいったようですが、特にunzipでこれを実行したいと思います。そして、私が得たエラーは次のとおりです。 注意:ファイル名が一致しません:-p 注意:ファイル名が一致しません:assets /、 私が持っているヘルプメニューを解凍します:
回答: よし、それはただの標準的な情報だ-あなたが実行しているzip unzip。使用している-pオプションは、期待どおりに機能しません。以下は、-pのエントリのマニュアルページです。 -p extract files to pipe (stdout). nothing but the file data is sent to stdout, and the files are always extracted in binary format, just as they are stored (no conversions). 例を挙げて作業してみましょう。まず、自分と同じようなディレクトリツリーを作成しますdata `-- folder `-- content |-- firstfolder | `-- secondfolder | `-- files | |-- f1 | |-- f2 | `-- f3 `-- myfiles |-- a1 |-- a2 `-- a3 それをzipに貼り付けます$ zip -r try.zip data $ unzip -l data.zip archive: try.zip length date time name --------- ---------- ----- ---- 0 04-22-2020 08:59 data/ 0 04-22-2020 08:59 data/file1 0 04-22-2020 08:59 data/file2 0 04-22-2020 08:56 data/folder/ 0 04-22-2020 08:57 data/folder/content/ 0 04-22-2020 08:57 data/folder/content/firstfolder/ 0 04-22-2020 08:57 data/folder/content/firstfolder/secondfolder/ 0 04-22-2020 08:57 data/folder/content/firstfolder/secondfolder/files/ 0 04-22-2020 08:57 data/folder/content/firstfolder/secondfolder/files/f2 0 04-22-2020 08:57 data/folder/content/firstfolder/secondfolder/files/f1 0 04-22-2020 08:57 data/folder/content/firstfolder/secondfolder/files/f3 0 04-22-2020 08:57 data/folder/content/myfiles/ 0 04-22-2020 08:57 data/folder/content/myfiles/a3 0 04-22-2020 08:57 data/folder/content/myfiles/a1 0 04-22-2020 08:57 data/folder/content/myfiles/a2 0 04-22-2020 08:59 data/file3 --------- ------- 0 16 files folderサブツリーのみを抽出する場合は、サブツリーに一致するワイルドカードをunzipに指定する必要があります。この場合、data/folder/*がトリックを実行します。$ unzip -d output try.zip 'data/folder/*' archive: try.zip creating: output/data/folder/ creating: output/data/folder/content/ creating: output/data/folder/content/firstfolder/ creating: output/data/folder/content/firstfolder/secondfolder/ creating: output/data/folder/content/firstfolder/secondfolder/files/ extracting: output/data/folder/content/firstfolder/secondfolder/files/f2 extracting: output/data/folder/content/firstfolder/secondfolder/files/f1 extracting: output/data/folder/content/firstfolder/secondfolder/files/f3 creating: output/data/folder/content/myfiles/ extracting: output/data/folder/content/myfiles/a3 extracting: output/data/folder/content/myfiles/a1 extracting: output/data/folder/content/myfiles/a2