私は、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];
ジッパーのドキュメントが真実を言っていたことを期待して:デフォルトでは
、ジッパーは (カレントディレクトリに対して)
完全なパスを格納します
しかし、これは期待どおりに機能しませんでした。 -jと-pおよび-rの設定を調整するだけで、上記の問題がさまざまな組み合わせで生成されます。
質問:私のようなディレクトリのセットを取ることができますどのように
- /いくつか/ロング/パス/ SUB2/file1を/some/long/path/sub1/file1.txt
.txtファイルとその内容
-
あるジッパーにそれらを圧縮ジップの機微上の任意のアドバイスのための3210
/sub2/file1.txt
/sub1/file1.txt感謝。私は追加するのを忘れ----- EDIT
もうひとつは、渡された元のディレクトリが「パス」であるので、望ましい結果はまた、私の心に予想される結果であるということです。代わりに前のタスクを起動する
[[NSFileManager defaultManager] changeCurrentDirectoryPath:path];
使用-[NSTask setCurrentDirectoryPath:]
の
これは素晴らしいソリューションのようです。私はどのように私はタスク固有のディレクトリメソッドを見逃しているのかわかりません。私は別のルートを見つけることができたので、私はこれをテストしていない。私がこれについて持っているもう一つの質問と私が提供する解決策については、もし二つのディレクトリが共通の親を持たないならどうでしょうか? – SG1
@ SG1ディレクトリに共通の親がない場合、 'zip'コマンドラインユーティリティがそれを行うことはできません。ディレクトリをいくつかのディレクトリにコピーすることはできますが、それは理想的ではありません。 –