ディレクトリ配下のファイルを一つにまとめる
データベースのTable作成のDDLを一か所にまとめたい
ときに便利。
(前提として、カレントディレクトリ直下に
ファイルとディレクトリしかないという条件で作成。
シンボリックリンク等があるなら、grepでそれも除外すること。)
ファイルとディレクトリしかないという条件で作成。
シンボリックリンク等があるなら、grepでそれも除外すること。)
$ ls -F | grep -v '/$' | rev | cut -c 2- | rev | xargs cat | cat > table.ddl
- .ls -Fはファイル名に対して、末尾にファイルの性質を表す記号を付けるコマンド。(実行可能形式のファイルには*、ディレクトリには/を末尾につける。)
- grep -v '/$'正規表現でディレクトリを除く。
- rev | cut -c 2- | revrevで文字列を反転させて、cutで後ろの一文字を削除し、もう一度revをかけて反転させることにより、元に戻す。
- xargs でls で作ったファイル名のリストをすべてcatの引数にする。(cat ファイル1 ファイル2 ファイル3 ...という形になる。)
- cat > table.ddl最後にファイルに書き込む。(上書きの>にすべき。理由は後述。)
プロジェクトとしてgitに登録する場合は、
各々のtable定義ファイルだけ登録して、
全体をまとめるtable.ddlファイルだけは
gitに登録しなくてよい。
(各々のtable定義ファイルを見るだけで、
管理できるはず。)
別解
$ ls -F | grep -v '/$' | sed 's/.$//' | xargs cat | cat > table.ddl
正規表現をつかうことになる。
Powershellなら下のようになる。
Get-ChildItem | Where-Object {$_.Mode[0] -ne "d"} |
Get-Content |
Set-Content table.ddl
Powershell
のほうが正直わかりやすい。
Powershell
のほうが正直わかりやすい。
コメント
コメントを投稿