2013-05-11 63 views
0

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

我写了一个脚本,可以在MATLAB中做到这一点,调用unix函数基本上循环文件夹中的所有文件,读取它们并获取它们的扩展名,最后从文件夹中删除它们。

我的代码成功地做到了,但它需要很长时间(大概一个小时)。文件夹中有大约12000个文件,但我正在寻找一些更具时间效率的东西,尽管尺寸很大。我确信终端中有两三行的捷径。

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”等,但他们不是。

+0

现在你正在寻找包含'html'作为.html文件的文件。那是你想要做的吗?检查MIME类型怎么办? – Mateusz 2013-05-11 21:35:06

回答

0

好吧,我得到的魔术棒:

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

的作品就像一个魅力。 (仅用了3分钟的电脑)。

1

也许你可以在一个单一的一个将二者结合起来的grep命令:

grep -E "GIF|html" file_name 

此外,关于GIF文件,我认为有可能避免拷贝整个文件,因为实际需要前三个字节。

+0

这可能会有帮助,你知道我怎样才能将我的matlab代码完全转换为shell脚本吗?也许这样更快。 – Arturo 2013-05-11 22:21:40

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>。这些将创建2个文件(gif_files,html_files),分别包含GIF和HTML文件的所需文件名。所有你需要做的是textscan(或textread)这两个文件来获取文件名。我想这种方法会更快,因为控制停留在bash shell而不是ping到shell并返回到MATLAB 20k +次!

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

相关问题