编写Shell脚本遍历目录并验证Demo子目录状态与子目录大小
没问题,我来帮你搞定这两个任务,分步骤给你说明:
1. 验证子目录大小
根据你使用的环境不同,有两种常用方法:
如果你用Git Bash/WSL这类类Unix Shell
可以用du命令快速查看目录大小:
- 查看单个子目录的总大小(人类可读格式):
参数解释:du -sh /mnt/c/xyz/你的子目录名-s汇总总大小,-h用KB/MB/GB等易读单位显示 - 列出
C:\xyz下所有一级子目录的大小:du -sh /mnt/c/xyz/*/
如果你用Windows原生PowerShell
用PowerShell的内置命令更贴合Windows环境:
- 查看单个子目录的总大小:
要是想转成易读的MB/GB格式,可以这样:Get-ChildItem -Path C:\xyz\你的子目录名 -Recurse | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum$size = (Get-ChildItem -Path C:\xyz\你的子目录名 -Recurse | Measure-Object Length -Sum).Sum / 1GB Write-Host "总大小:$($size.ToString('0.00')) GB" - 列出
C:\xyz下所有一级子目录的大小:Get-ChildItem -Path C:\xyz -Directory | ForEach-Object { $dirSize = (Get-ChildItem $_.FullName -Recurse | Measure-Object Length -Sum).Sum / 1MB Write-Host "$($_.Name): $($dirSize.ToString('0.00')) MB" }
2. 编写Shell脚本查找并判断Demo目录
这里分两种场景给你写脚本,适配不同的Windows Shell环境:
场景1:Git Bash/WSL类Unix Shell脚本
这个脚本会递归遍历C:\xyz(转成Shell识别的/mnt/c/xyz),找到所有名为Demo的子目录,再判断是否为空:
#!/bin/bash # 定义目标根目录,注意Windows路径在Shell中要转换为/mnt/c/格式 TARGET_ROOT="/mnt/c/xyz" # 递归查找所有名为Demo的目录,逐个处理 find "$TARGET_ROOT" -type d -name "Demo" | while read -r demo_path; do # 判断目录是否非空(-A参数会包含隐藏文件) if [ -n "$(ls -A "$demo_path")" ]; then echo "OK: $demo_path" else echo "NOT_OK: $demo_path" fi done
脚本说明:
find "$TARGET_ROOT" -type d -name "Demo":递归搜索所有类型为目录、名称严格匹配Demo的路径while read -r demo_path:遍历每一个找到的Demo目录ls -A "$demo_path":列出目录内所有内容(包括隐藏文件),如果目录为空则输出为空字符串[ -n "$(...)" ]:判断输出是否非空,非空则输出OK,否则输出NOT_OK
场景2:Windows原生批处理脚本(.bat/.cmd)
如果你习惯用Windows自带的命令行,这个批处理脚本更合适:
@echo off set "TARGET_ROOT=C:\xyz" :: 递归遍历TARGET_ROOT下所有名为Demo的目录 for /r "%TARGET_ROOT%" /d %%d in (Demo) do ( :: 判断目录是否为空:列出目录内容,若没有任何输出则为空 dir /b "%%d" | findstr . >nul if errorlevel 1 ( echo NOT_OK: %%d ) else ( echo OK: %%d ) )
脚本说明:
for /r "%TARGET_ROOT%" /d %%d in (Demo):递归搜索TARGET_ROOT下所有名为Demo的目录dir /b "%%d" | findstr . >nul:用dir /b列出目录内容,findstr .检查是否有内容,没有则errorlevel为1- 根据
errorlevel的值输出NOT_OK或OK,同时带上目录路径方便定位
内容的提问来源于stack exchange,提问作者Priyadarshi Abhishek
相关产品推荐
相关产品推荐

