0

ターミナルまたは MATLAB を介してフォルダー内のすべての .html ファイルを取得する必要がありますが、問題は、これらの .html ファイルのファイルに明示的に .html 拡張子がないことです。この場合、同様に .GIF であるが明示的に拡張子を持たないファイルもキャッチしようとしています。

MATLAB でこれを実行できるスクリプトを作成しました。このスクリプトは、unix 関数を呼び出してフォルダー内のすべてのファイルを基本的にループし、それらを読み取り、拡張子を取得して、最後にフォルダーから削除します。

私のコードは正常に実行されますが、時間がかかりすぎます (おそらく約 1 時間)。フォルダーには約 12,000 個のファイルがありますが、サイズにかかわらず、より時間効率の良いものを探しています。端末に 2 ~ 3 行のショートカットがあるはずです。

close all; clear all;

Z=dir('./');
file_number=length(Z)-2;

stats=[];
stats2=[];

for i=1:file_number
    file_name=Z(i+2).name;
    command=['cat ' file_name ' | grep GIF'];
    stats=~unix(command);
    command2=['cat ' file_name ' | grep html'];
    stats2=~unix(command2);

    if stats==1 || stats2==1
        command3=['rm ' file_name];
        unix(command3);
    end

    if rem(i,100)==0
        disp(i);
    end
end

もう 1 つの重要な詳細: ファイルの名前に .html または .gif が含まれていません。マジック ナンバー (および右クリックしてファイルのプロパティを表示) により、そのタイプがあることはわかっています。私のファイル名は「1」、「2」、...、「7」、...「11498」です。理想的には、「1.html」、「2.gif」、「3.jpg」などですが、そうではありません。

4

3 に答える 3

1

おそらく、2 つの grep コマンドを 1 つのコマンドに組み合わせることができます。

grep -E "GIF|html" file_name

また、GIF ファイルに関しては、実際には最初の 3 バイトが必要なので、ファイル全体をコピーすることは避けられるのではないかと思います。

于 2013-05-11T21:44:53.470 に答える
0

現在、Linux では確認できませんが、私のコード (bash 用) は次のとおりです。

% HTML part
command=['for f in ./*; do if grep -q "<html>" "$f"; then  printf "$f\n" >> html_files; fi; done'];
stats=~unix(command);
% GIF part
command2=['for f in ./*; do first_bytes=$(head -c 3 $f); if [ "$first_bytes" == "GIF" ]; then printf "$f\n" >> gif_files; fi; done'];
stats2=~unix(command);

gif ファイルの場合、最初の 3 バイトは「GIF」である必要があります。html ファイルの場合、おそらく < html> を含める必要があります。これらは、それぞれ GIF ファイルと HTML ファイルの目的のファイル名を含む 2 つのファイル (gif_files、html_files) を作成します。あなたがしなければならないのは、ファイル名を取得するためにこれらの 2 つのファイルtextscan(または) だけです。textreadシェルにピンポンして MATLAB に 2 万回以上戻るのではなく、制御が bash シェルにとどまるため、この方法の方が高速になると思います。

注意!gif_files と html_files が存在しないこと (または少なくとも空白であること) を確認してください。そうしないと、重複したデータを読み取る可能性があります。

于 2013-05-11T23:11:32.140 に答える
0

さて、私は魔法の杖を手に入れました:

grep -r -l -E "GIF|html" . | xargs rm

魅力のように機能します。(コンピューターにかかった時間はわずか 3 分です)。

于 2013-05-11T23:16:09.623 に答える