모든 빈 "리프" 하위 디렉터리에 빈 파일을 반복적으로 생성합니다.

모든 빈 "리프" 하위 디렉터리에 빈 파일을 반복적으로 생성합니다.

Maven내 프로젝트의 디렉토리 구조를 만들었습니다.

$ tree -a -I .git
.
├── .gitignore
├── README.md
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   └── resources
    └── test
        ├── java
        └── resources

7 directories, 2 files

이제 구조를 에 유지하고 싶습니다 .git. 이를 위해서는 생성이 필요합니다.가상 파일하위 디렉토리에 있습니다. .gitkeep모든 파일에 빈 파일을 (재귀적으로) 어떻게 추가합니까?빈 하위 디렉터리?


다음 질문에서는 이미 하위 디렉터리에 (재귀적으로) 빈 파일을 만드는 방법에 대해 논의하고 있지만파일은 다음에서만 생성할 수 있습니다.리프 디렉토리그리고 어느 것 하나도 아니고중간 디렉토리

답변1

~에서라이언 암스트롱의 블로그find, GNU 또는 호환 버전을 사용하여 수행하는 방법은 다음과 같습니다 .

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

관련 정보