我需要通过终端或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”等等。但它们不是。
答案 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分钟。)