bash - 在 Bash 中递归检查每个文件的属性
问题描述
我一直在尝试制作一个从文件夹(即我的主文件夹)开始的 bash 脚本,然后递归地获取每个文件并检查一些属性。假设我想检查我的文件是否有一定的大小并在其中包含文本(不是二进制数据)。它应该处理隐藏文件或以连字符开头的特殊情况。这就是我想出的:
for i in $(cd "/home/user" && ls -aR);
do
if [[ $(file ./"$i") == "./\"$i\": ASCII text" ]] && [[ $(du -b ./"$i" | grep -oE "[0-9]+") == "1015" ]]; then
echo ./"$i"
fi
done
我不知道有多少子文件夹,我需要它来回显符合条件的文件的路径。它适用于 /home/user/ 中的文件,但它似乎没有找到(并因此检查)任何子文件夹中的文件。我该如何解决这个问题?
解决方案
bash
除非另有说明,否则我将假设您使用的是4。
shopt -s globstar
for f in /home/user/**/*:
if [[ $(file -- "$f") != *": ASCII text" ]]; then
continue
fi
# This is the syntax for GNU stat; consult your manual for
# other implementations
size=$(stat -c %s -- "$f")
if (( size != 1015 )); then
continue
fi
echo "$f"
done
推荐阅读
- android - GridLayout cardview 走出屏幕 Android
- android - 在移动设备上运行 react-native 时遇到问题
- python - 将时间戳(纳秒格式)转换为日期时间
- javascript - 根据 id 比较两个对象数组
- android - 在 kotlin 中每月点击一些按钮后禁用按钮点击
- reactjs - React CloneElement 中的类型问题
- flutter - 未处理的异常:类型“_File”不是颤振中“文件”类型错误的子类型
- emacs - 为 emacs 自定义选项卡
- java - 在 Android Studio 中出现图像闪烁问题
- php - 如何用 div 包装非 oEmbed 视频?