ディレクトリ配下のファイルを一つにまとめる

データベースのTable作成のDDLを一か所にまとめたい
ときに便利。
(前提として、カレントディレクトリ直下に
ファイルとディレクトリしかないという条件で作成。
シンボリックリンク等があるなら、grepでそれも除外すること。)

$ ls -F | grep -v '/$' | rev | cut -c 2- | rev | xargs cat | cat > table.ddl

  1. .ls -F
    はファイル名に対して、末尾にファイルの性質を
    表す記号を付けるコマンド。
    (実行可能形式のファイルには*、ディレクトリには/を末尾につける。)
  2. grep -v '/$'
    正規表現でディレクトリを除く。
  3. rev | cut -c 2- | rev
    revで文字列を反転させて、
    cutで後ろの一文字を削除し、
    もう一度revをかけて反転させることにより、
    元に戻す。
  4. xargs で
    ls で作ったファイル名のリストをすべてcatの引数にする。
    (cat ファイル1 ファイル2 ファイル3 ...という形になる。)
  5. 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
のほうが正直わかりやすい。

コメント

人気の投稿