bash - 基于扩展名显示目录中文件路径和大小的 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
解决方案
要列出目录 $mydir 中的文件并删除它们,请使用
shopt -s nullglob
for f in $mydir/*.{exe,mp3,avi}
do
rm -v $f
done
使用nullglob可确保如果没有与某个扩展名匹配的文件,则不会执行循环。rm-v
选项确保将文件报告给标准输出。
推荐阅读
- umbraco - Umbraco 8 IUmbracoEntity AdditionalData
- vue.js - 单击时,按钮不会在 vuejs 中调用我的方法
- php - 无故显示重复的 pdf 图标图像
- ruby-on-rails - 错误:没有将符号隐式转换为整数
- c# - htmlFieldPrefix 打破局部视图之外的名称
- javascript - 如何导入改变我的功能组件状态的函数(钩子)
- javascript - 将带有参数的装饰器添加到需要来自实例化类的数据的抽象类(打字稿)
- .net - .NET 和 dart/flutter 的 MD5 哈希值不同
- javascript - JS FileReader 用以前的值复制自己
- css - 在 Next JS + styled-components 上,Material UI 的样式标签会在页面更新时打破其初始样式规则