すべての空の「リーフ」サブディレクトリに空のファイルを繰り返し作成します。

すべての空の「リーフ」サブディレクトリに空のファイルを繰り返し作成します。

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

関連情報