次のツリー構造の場合:
.
└── dir1
└── dir2
└── dir3
各ディレクトリごとにファイル(空にすることができます)を作成する簡単な方法は何ですか?結果ツリーは次のとおりです。
.
├── dir1
│ ├── dir2
│ │ ├── dir3
│ │ │ └── README
│ │ └── README
│ └── README
└── README
答え1
そしてzsh
:
touch -- README **/*(N/e[REPLY+=/README])
それは結合する再帰ワイルドカード(**/*
)とグローバル予選、ここにいる:
N
ullglob: 一致するものがない場合、エラーは発生しません。/
: ファイル形式の制限目次e[code]
:各ファイルについてe
評価され、ここにファイルパスに追加されます(評価されたコードに保存されます)。code
/README
$REPLY
またはあなたは使用することができます匿名関数/README
ディレクトリリストが渡され、渡された引数の各ディレクトリに追加されますtouch
。
() {touch -- $^@/README} . **/*(N/)
(そしてrcスタイル配列の拡張@
構文を使用する匿名関数パラメータの場合$^array
)。
これらのすべてでは、D
otglob 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