NSTask を使用してアプリ内から zip コマンドを実行しています。圧縮するファイル/フォルダーを指すいくつかのパスが引数として渡されます。
問題は、-j オプションを指定しないと、最終的な zip が zip 内の不条理なファイルパスになってしまうことです (「/private/var/folders/A5/A5CusLQaEo4mop-reb-SYE+++TI/-Tmp-/9101A216-」など)。 5A6A-4CD6-A477-E4B86E007476-51228-00014BCB9514323F/myfile.rtf")。ただし、-j オプションを追加すると、ネストされたフォルダー内のどこかにファイルがある場合、常に名前の競合が発生します。
NSTask を実行する前にパスを設定してみました:
[[NSFileManager defaultManager] changeCurrentDirectoryPath:path];
zip のドキュメントが真実を語っていることを期待して:
デフォルトでは、zip はフル パス (現在のディレクトリからの相対パス)を格納します。
しかし、これは期待どおりに機能しませんでした。-j と -p と -r の設定を調整すると、さまざまな組み合わせで上記の問題が発生します。
質問:
次のような一連のディレクトリを取得するにはどうすればよいですか
- /some/long/path/sub1/file1.txt
- /some/long/path/sub2/file1.txt
それらをzipに圧縮し、その内容は次のとおりです
- /sub1/file1.txt
- /sub2/file1.txt
zip の微妙な点についてアドバイスをいただきありがとうございます。
- - -編集
追加するのを忘れていたもう1つのことは、渡される元のディレクトリが「パス」であるため、望ましい結果は期待される結果でもあるということです。