通过没有显式扩展名的终端获取目录中的所有html文件

时间:2013-05-11 21:22:50

标签: html matlab shell terminal grep

我需要通过终端或MATLAB获取文件夹中的所有.html文件,但问题是这些.html文件在文件中没有明确的.html扩展名。在这种情况下,我也试图捕获.GIF的文件,但没有明确的扩展名。

我编写了一个可以在MATLAB中执行此操作的脚本,该脚本调用unix函数基本上遍历文件夹中的所有文件,读取它们并获取它们的扩展名,最后将它们从文件夹中删除。

我的代码成功完成了它,但它需要太长时间(可能大约一个小时)。文件夹中有大约12,000个文件,但我正在寻找一些更节省时间的文件。我确信终端中有两三行的快捷方式。

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

另一个重要细节: 我的文件名称中没有.html或.gif。我知道他们有这种类型,因为他们的神奇数字(并通过右键单击和查看文件属性)。我的文件名是“1”,“2”,......,“7”,......“11498”。理想情况下,它们是“1.html”,“2.gif”,“3.jpg”等等。但它们不是。

3 个答案:

答案 0 :(得分:1)

也许您可以将两个grep命令合并为一个:

grep -E "GIF|html" file_name

另外,关于GIF文件,我认为可以避免复制整个文件,因为实际需要前三个字节。

答案 1 :(得分: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文件,它可能必须包含&lt; HTML取代。这些将创建2个文件(gif_files,html_files),分别包含GIF和HTML文件的所需文件名。您只需要textscan(或textread)这2个文件来获取文件名。我想这个方法会更快,因为控件保留在bash shell上,而不是ping到shell并返回MATLAB 20k +次!

注意!确保gif_files和html_files不存在(或者至少它们是空白的),否则你可能会读取重复的数据。

答案 2 :(得分:0)

好吧,我拿到了魔棒:

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

就像一个魅力。 (电脑只用了3分钟。)