Maven
我已经为我的项目创建了目录结构。
$ tree -a -I .git
.
├── .gitignore
├── README.md
├── pom.xml
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
└── resources
7 directories, 2 files
现在我想将结构持久化到.git
,这需要创建虚拟文件在子目录中。我如何(递归地)将空.gitkeep
文件添加到所有空子目录?
以下问题已经讨论了在子目录中(递归)创建空文件,但我想要只能在以下位置创建的文件叶目录并且不在任何中间目录
答案1
从瑞安·阿姆斯特朗的博客,这是使用 GNUfind
或兼容版本执行此操作的方法:
find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;
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
答案2
使用 zsh:
() {touch -- $^@/.gitkeep} **/*(/^F)
在哪里:
**/
:任意数量(包括 0)的子目录(递归全局)。请注意,默认情况下会忽略隐藏的文件和目录。(/^F)
: 全局限定符:/
: 文件类型目录^F
: 不全F
(空)
{} {body} arguments
:匿名函数:$^@
:$@
启用rc_expand_param
后,它会扩展为与...$^@/.gitkeep
相同,而不是... ,否则会这样做。$1/.gitkeep
$2/.gitkeep
$n/.gitkeep
$1
$2
$n/.gitkeep