ツリーの各ディレクトリのファイルを作成するには?

ツリーの各ディレクトリのファイルを作成するには?

次のツリー構造の場合:

    .
└── dir1
    └── dir2
        └── dir3

各ディレクトリごとにファイル(空にすることができます)を作成する簡単な方法は何ですか?結果ツリーは次のとおりです。

.
├── dir1
│   ├── dir2
│   │   ├── dir3
│   │   │   └── README
│   │   └── README
│   └── README
└── README

答え1

そしてzsh

touch -- README **/*(N/e[REPLY+=/README])

それは結合する再帰ワイルドカード**/*)とグローバル予選、ここにいる:

  • Nullglob: 一致するものがない場合、エラーは発生しません。
  • /: ファイル形式の制限目次
  • e[code]:各ファイルについてe評価され、ここにファイルパスに追加されます(評価されたコードに保存されます)。code/README$REPLY

またはあなたは使用することができます匿名関数/READMEディレクトリリストが渡され、渡された引数の各ディレクトリに追加されますtouch

() {touch -- $^@/README} . **/*(N/)

(そしてrcスタイル配列の拡張@構文を使用する匿名関数パラメータの場合$^array)。

これらのすべてでは、Dotglob glob修飾子を追加してREADME隠しディレクトリに追加できます。

答え2

findを使用してこれを行うことができます。

find . -mindepth 1 -type d -exec touch "{}/README" \;

説明する

  • -mindepth 1現在のディレクトリを含めないように最小深度を設定します。
  • -type dディレクトリのみが検索されます。
  • -execコマンドを実行します
  • {}見つかったディレクトリへのパスが含まれています。

組み込みのシェルコマンドのみを使用したい場合:

for dir in *; do if [ -d "$dir" ]; then touch "$dir/README"; fi; done

説明する

  • for*の各要素、つまり現在のディレクトリ内のすべてのファイルを繰り返します。dirループ中に現在の要素が含まれます。
  • if [ -d $dir ]要素がディレクトリであることを確認してから
  • README含まれているディレクトリの名前で名前付きファイルを作成します。$dir

関連情報