首页 > 解决方案 > 基于扩展名显示目录中文件路径和大小的 Bash 脚本

问题描述

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

例如,在我的主目录中,有以下文件格式的文件 - .exe - .pdf - .txt - .mp3 - .avi - .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

标签: bashshell

解决方案


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

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

使用nullglob可确保如果没有与某个扩展名匹配的文件,则不会执行循环。rm-v选项确保将文件报告给标准输出。


推荐阅读