
[code]

    # zipファイル名
    zip_file_name= "test.zip"
    # zipファイルパス
    zip_file_path = File.join Rails.public_path, zip_file_name
    # zipファイルに含ませるファイル
    file = "xxxxxxx/xxxxx/test.txt"
    
    `zip -jm #{zip_file_path } #{file}`  ①
    FileUtils.chmod(0664, zip_file_path )②
    'rm #{file}'③
    
[/code]

①でtest.txtをtest.zipとして圧縮、  
②でtest.zipファイルのパーミッション変更  
③でtest.txtファイルを削除

zipファイルに含ませるファイルは変更せずに、  
①でつくるzipファイルに含ませるファイル名をtest2.txtに変えることは可能でしょうか？


CC BY-SA 4.0
2018-05-14T23:34:37.327
43989
2019-04-03T17:02:20.550
2018-05-15T08:51:17.537
76
12842
question
ruby
zipファイル内のファイル名を変更したい


質問は、「初期状態(与えられるデータ)："test.txt"ファイルを圧縮した"test.zip"ファイルがある。（"test.txt"ファイルは既に削除されていて存在しない）  
希望する最終状態(結果として作られるデータ)："text.txt"と内容が同じでファイル名が"test2.txt"のファイルが、"test.txt"ファイルと置き換わった"test.zip"ファイル  
」を満たす操作手順が知りたいという事だと思われます。

以下の操作で如何でしょう  
1\. `$ unzip test.zip` コマンドでtest.zipを解凍して、"test.txt"ファイルを取り出す  
2\. `$ zip -d test.zip test.txt` コマンドでtest.zipから"test.txt"ファイルを削除する  
3\. `$ mv test.txt test2.txt`コマンドでファイル名を"test.txt"から"test2.txt"に変更する  
4\. `$ zip test.zip test2.txt` コマンドで"test2.txt"ファイルを"test.zip"ファイルに追加する


CC BY-SA 4.0
2018-05-15T08:06:00.867
44003
2018-09-22T06:33:20.573
2018-09-22T06:33:20.573
29826
217
43989
answer


zip コマンドではなく、Ruby の Zip ライブラリを使用するのはどうでしょうか。

<https://github.com/rubyzip/rubyzip>

`Zip::File#add` の第一引数が Zip 内のファイル名、第二引数が格納したい実ファイル名です。


CC BY-SA 4.0
2018-05-16T04:27:28.773
44015
2018-05-16T04:27:28.773
3249
43989
answer