如何用Windows递归命令追踪空文件夹并创建.keep文件以提交至Git
嗨,这个需求很常见——Git本身不追踪空文件夹,所以用.keep文件来占位是标准操作。在Windows上,用CMD或者PowerShell都能递归完成这个任务,给你两种实用方案:
方案1:使用CMD命令
如果你习惯用传统的命令提示符,执行这条命令就行:
for /r /d %d in (*) do @if not exist "%d\*.*" echo. > "%d\.keep"
参数说明:
/r:递归遍历当前目录及所有子目录/d:只针对文件夹进行遍历%d:代表当前遍历到的文件夹路径@if not exist "%d\*.*":判断该文件夹下是否没有任何文件(包括隐藏文件)echo. > "%d\.keep":在空文件夹里创建一个空的.keep文件
注意:如果是把这条命令写到批处理(
.bat)文件里,需要把%d改成%%d,否则会报错:for /r /d %%d in (*) do @if not exist "%%d\*.*" echo. > "%%d\.keep"
方案2:使用PowerShell命令
PowerShell的语法更直观,功能也更灵活,这条命令同样能实现需求:
Get-ChildItem -Recurse -Directory | Where-Object { $_.GetFiles().Count -eq 0 } | ForEach-Object { New-Item -Path "$($_.FullName)\.keep" -ItemType File -Force }
分步解释:
Get-ChildItem -Recurse -Directory:递归获取当前目录下的所有文件夹Where-Object { $_.GetFiles().Count -eq 0 }:筛选出没有任何文件的空文件夹ForEach-Object { New-Item ... }:给每个空文件夹创建.keep文件,-Force参数确保即使已经存在该文件也不会抛出错误
额外提示
- 两种命令默认都是在当前目录下执行,如果你想指定目标路径,比如
D:\my-git-project:- CMD命令可以改成:
for /r "D:\my-git-project" /d %d in (*) do @if not exist "%d\*.*" echo. > "%d\.keep" - PowerShell命令改成:
Get-ChildItem -Path "D:\my-git-project" -Recurse -Directory | ...
- CMD命令可以改成:
- 后续如果文件夹里添加了内容,
.keep文件可以保留也可以删除,不影响Git对文件夹的追踪(只要文件夹里有其他文件,Git就会识别它)
内容的提问来源于stack exchange,提问作者Oz Giat
相关产品推荐
相关产品推荐

