在空子目录中递归创建空文件

y2k*_*ham 3 command-line bash

我已经为我的Maven项目创建了目录结构。

$ tree -a -I .git
.
??? .gitignore
??? README.md
??? pom.xml
??? src
    ??? main
    ?   ??? java
    ?   ??? resources
    ??? test
        ??? java
        ??? resources

7 directories, 2 files
Run Code Online (Sandbox Code Playgroud)

现在我想将结构持久化到.git,这需要在子目录中创建虚拟文件。如何(递归地)将空.gitkeep文件添加到所有空子目录


以下问题已经讨论(递归)在子目录中创建空文件,但我希望文件只在叶目录中创建,而不是在任何中间目录中

y2k*_*ham 8

来自Ryan Armstrong 的博客,这是您的操作方法

find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;
Run Code Online (Sandbox Code Playgroud)
  • find . -type d (递归)查找当前路径下的目录
  • -empty 过滤掉已经包含某些内容的目录
  • -not -path "./.git/*"确保在.git目录中没有创建文件
  • -exec touch {}/.gitkeep \;.gitkeep在符合上述条件的每个目录中创建空文件

结果结构看起来像

$ tree -a -I .git
.
??? .gitignore
??? README.md
??? pom.xml
??? src
    ??? main
    ?   ??? java
    ?   ?   ??? .gitkeep
    ?   ??? resources
    ?       ??? .gitkeep
    ??? test
        ??? java
        ?   ??? .gitkeep
        ??? resources
            ??? .gitkeep

7 directories, 7 files
Run Code Online (Sandbox Code Playgroud)