Bash脚本,根据扩展名显示目录中的文件路径和大小

Bash脚本,根据扩展名显示目录中的文件路径和大小,bash,shell,Bash,Shell,目前,我需要创建一个bash脚本,让用户输入一个目录路径,例如/home,它将遍历整个home目录,并根据文件扩展名(.exe、.mp3、.avi)显示文件路径和文件大小的摘要 例如,在我的主目录中,有以下文件格式的文件 -.exe -.pdf -.txt -.mp3 -阿维先生 -.mp4 因此,当我运行脚本时,它应该在控制台上显示摘要,然后删除文件 Filename Filesize Filepath --------- --------- --------- test1.e

目前,我需要创建一个bash脚本,让用户输入一个目录路径,例如/home,它将遍历整个home目录,并根据文件扩展名(.exe、.mp3、.avi)显示文件路径和文件大小的摘要

例如,在我的主目录中,有以下文件格式的文件 -.exe -.pdf -.txt -.mp3 -阿维先生 -.mp4

因此,当我运行脚本时,它应该在控制台上显示摘要,然后删除文件

Filename    Filesize   Filepath
---------   ---------  ---------
test1.exe   5kb        /home/program/
test2.exe   6kb        /home/program/
test3.mp3   10mb       /home/music/
test4.avi   15mb       /home/video/

4 files are removed
下面是我试图尝试的代码

function check {
    for file in $1/*      
    do
    if [ -d "$file" ]
    then
            check $file                          
    else
           ##check for the file
           if [ $(head -c 4 "$file") = "%EXE" || $(head -c 4 "$file") = "%MP3" || $(head -c 4 "$file") = "%AVI" ]; then
         find $filepath -iregex ".*\.\(exe\|mp3\|avi\)" > log
                     rm -r $file
                     my $filecounter +=1;
         print "$filecounter files are removed"
           fi
    fi
    done     
}
print "Please enter file path:";
chomp( my $filepath = <STDIN> );
check $filepath
功能检查{
以$1/*
做
如果[-d“$file”]
然后
检查$file
其他的
##检查文件
如果[$(head-c4“$file”)=%EXE“| |$(head-c4“$file”)=%MP3“| |$(head-c4“$file”)=%AVI”;则
查找$filepath-iregex“*.\(exe\\mp3\\avi\)”>日志
rm-r$文件
my$filecounter+=1;
打印“$filecounter文件已删除”
fi
fi
完成
}
打印“请输入文件路径:”;
chomp(my$filepath=);
检查$filepath

要列出$mydir目录中的文件并将其删除,请使用

shopt -s nullglob
for f in $mydir/*.{exe,mp3,avi}
do 
    rm -v $f
done

使用nullglob可以确保在没有与特定扩展名匹配的文件的情况下不会执行循环。rm的
-v
选项确保将文件报告给stdout。

您没有问任何问题。你想知道什么?顺便说一句,在你的帖子中,你谈论的是文件扩展名,但在你的代码中,你调查了每个文件的前4个字符。另外,您可以说您想列出这些文件,但在代码中,您试图删除它们。如果你希望得到有用的答案,那么你的写作就需要更加精确……顺便说一句,
rm
-r
选项在与文件一起使用时没有意义。请参阅rm手册页。您好,用户1934428,很抱歉我没有正确表达我的问题。这是我试图在网上找到的代码。我想做的是列出符合条件的所有文件,其中文件ext是.exe、.mp3、.avi。在显示符合该要求的文件列表后,它将删除这些文件。那么,如果您只对扩展名感兴趣,为什么还要查看这些文件呢?您的意思是“查找$filepath-iregex”。*\(exe\;mp3\;avi)“>日志”?对于上述解决方案,它不会显示符合条件的文件列表并正确显示其路径,只会删除它们?@Mat:它会显示并删除它们-所有以exe、mp3或avi结尾的文件。请阅读我的解释:…确保将文件报告给stdout。