【发布时间】:2019-08-02 03:47:21
【问题描述】:
我必须通过删除所有未使用的文件来清理目录及其子目录。 (如果一个文件没有在任何
的 HTML 文件,或者如果没有明确指定该文件正在使用中)。可以通过href 或img src 在HTML 文件中链接文件。
例如,我有一个 I.html、1.html、2.html 和 1 文件夹。在I.html 文件中,href 使用1.html 和1 目录,但2.html 不被任何其他文件使用。那么,如何删除未使用的2.html 文件?
use strict;
use warnings;
my($path,$regexExpression) = @ARGV;
my $fileNames = "data.txt";
my @abc= ();
if(not defined $path){
die "File directory not given, please try again \n"
}
print "added file ";
if (not defined $regexExpression) {
$regexExpression="*";
print "--Taking default Regular Expression. \n"
}
if (defined $regexExpression) {
print "The regular Expression : $regexExpression \n";
my $directorypathx= `pwd`;
my ($listofFileNames) = findFilesinDir($path);
my ($listofLinks) = readallHrefInaFile();
my ($listofImage) = readImageFile();
print $listofLinks;
}
sub findFilesinDir{
print "inside subroutines ", $path,"\n";
my($pathName) = @_;
my $fileNames =`find '$pathName' -name '$regexExpression' | sort -h -r > $fileNames ` ;
if (-l $fileNames){
return $fileNames;
}
}
sub readallHrefInaFile{
my $getAllLinks = ` grep -Eo "<a .*href=.*>" $path*.html | uniq ` ;
push (@abc,$getAllLinks);
}
sub readImageFile{
print "image files \n";
my $getAllImage = ` grep -Eo "<img .*src=.*>" $path*.html | uniq `;
push (@abc,$getAllImage);
}
print @abc;
I.html
<html>
<head>
<title>Index</title>
</head>
<body>
<h1>Index</h1>
<a href="1.html">1</a>
<h1>Downloads</h1>
<a href="downloads/s.zip">Compressed craters</a>
<hr>
</body>
</html>
1.html
<html>
<head>
<title>1</title>
</head>
<body>
<h1>1</h1>
<img src="images/1-1.gif" />
<img src="images/1-2.gif" />
<hr>
</body>
</html>
【问题讨论】:
-
如果您提供一个简短但完整的示例(包括任何输入数据),您可以提高获得好答案的机会。您还可以提供预期的输出。
-
在输出 2.html 文件将移动到另一个文件夹,因为该文件没有与另一个文件链接。
-
请注意,
push返回数组中元素的数量,而不是文件名列表。例如,readImageFile不会返回文件名列表 -
@HåkonHægland 它返回文件名,但它也会返回 2.html 文件。我只想要文件名是 I.html 和 1.html 和 1 个目录。
-
@Jack 对
$fileNames进行-l测试的目的是什么?您正在将反引号的输出重定向到$fileNames,但同时在同一变量中收集反引号的 STDOUT。但 STDOUT 将为空,因为您将其重定向到文件。