it-swarm-ja.com

コマンドラインツール「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 /、

私が持っているヘルプメニューを解凍します: Unzip on macOS 10.13.6

1
SomePerson

よし、それはただの標準的な情報だ-あなたが実行している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  
2
pmqs