2011-04-26 41 views
0

MacでExcelで.tsvファイルを取り出すときに、zipして、Linuxマシンに送信し、unzipコマンドを使用して解凍すると、ファイルの最後に迷惑メールが入ります。ファイルには、19行のデータがあります。私はファインダーの右クリックメニューからデフォルトの "圧縮"機能を使用します。私はPHPを介してファイルをアップロードします。ここで私はzipファイルに(手動または自動スクリプトから)実行するコマンドです:解凍して新しいファイルにパイプするときに、zipファイルの最後からジャンクを削除するにはどうすればよいですか?

unzip -aajp {zipfile} > {newfile} 

私は{NEWFILE}を開くと、私は、ファイルの終わりに、このすべてを参照してください。

^@^E^V^G^@^B^@^@Mac OS X  ^@^B^@^@^@ ^@^@^@2^@^@^@ ^@^@^@^B^@^@^@R^@^@^@^@TEXTXCEL^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ 

ファイルの末尾にある迷惑メールを取り除くにはどうしたらいいですか?

私が実行します。

unzip -aaj {zipfile} 

ジャンクなし無地/うまくテキストに変換し、ファイルを解凍します。しかし、私のPHPスクリプトでは、ファイルの正確な名前/場所を取得できる必要があります。

私はどちらにしてもこれを行うことはできません。私はちょうど正しい解決策を見つけることができないようです。それは言われている、それはWindowsからも来るファイルのために働く必要があります。何か案は?

UPDATE:

ここでは、私がやってしまったものですが、それはまだずさんな感じ。私はまだもっと良い解決策を開いています。

function decompress($filename) { 
    // generate a temporary filename 
    $tmpfile = '/tmp/'.mt_rand(); 

    // Here we actually decompress the $working_zip_file file 
    $command = "unzip -aao $filename -d $tmpfile/ | egrep \"(inflating:|extracting:)\" | grep -v MACOS "; 
    $unzip_output = exec($command, $dummy, $unzipstatus); 

    // If things where unzipped properly 
    if($unzipstatus[0] == 0) { 
     $work_plain_file = preg_match('/\s*(inflating:|extracting:)(.*)$/', $unzip_output, $matches); 
     $work_plain_file = trim($matches[2]); 
     $clean_name = str_replace(' ', '_', $work_plain_file); 
     if($clean_name != $work_plain_file){ 
      exec("mv \"$work_plain_file\" $clean_name"); 
      $work_plain_file = $clean_name; 
     } 
     rename($work_plain_file, $new_file); 
    } 
} 

答えて

1

unzipは、リソースフォークに関してはダムです。 .DS_Storeにあるものはすべて無視するように指示する必要があります。

+1

これを行うためのフラグはありますか? –

+0

'-x'を試してみることもできますが、最後のパスコンポーネントと一致するかどうかはわかりません。ファイルを抽出する別のツールを使用する必要があるかもしれません。 –

+0

私はこれを 'unzip -aao {FILENAME} -x * MACOSX * -x * ._ *'のようにファイルを展開するために動かすことができました。それは余分なファイルをすべて除外しました。 –

関連する問題