Powershellで下記を実行
Get-ChildItem * | Sort-Object -Property LastWriteTime | ForEach-Object {@'
FileName - {0} -- LastUpdate: {1}
{2}
#########################
'@ -f $_.Name, $_.LastWriteTime, (Get-Content $_.FullName -Raw)} | Out-File ..\out\memo_all.txt -Encoding default
※あらかじめ目的のファイルのあるフォルダに移動しておく。
2回目以降実行の際に、新たに作成したファイルを取り込まないようにするため、
1階層上のフォルダにoutフォルダを作成しておき、そこに出力する。
出力ファイルは以下のようになる
FileName - 0220.txt -- LastUpdate: 2019/02/23 22:16:29
hogehoge
hogehoge
#########################
FileName - 0221.txt -- LastUpdate: 2019/02/23 22:16:34
fugofugo
piyopiyo
#########################
FileName - 0222.txt -- LastUpdate: 2019/02/23 22:16:38
nya
nya
nya
#########################
Bashで
せっかくなのでBashでも作ってみた(Bashだと日付の"/"が"-"になって出力される)
for i in `ls -tr *.txt`; do echo -e "FileName - $i -- LastUpdate: `ls --full-time $i | sed -e "s/ \+/ /g" | cut -d " " -f 6-7 | cut -d "." -f 1` \n `cat -s $i` \n\n#########################\n" >> ../out/memo_all.txt ; done
両方作成してみて気づいたこと
- powershellの ヒアドキュメント (@'~'@の部分。わりと自由に成型できる)が便利。
- Bashよりファイルの **情報(プロパティ)**を得るのが楽。更新日時がすんなり拾えた。他の情報も必要に応じて簡単に追加できる。
- Bashはひと工夫必要で、コマンドがだいぶややこしくなった。その代わり、好きなフォーマットに変えられるなど、自由度が高いとも言えそう。
- 例えばcatの部分は -sオプション を使うことで、2行以上連続した(無駄な)改行を1行にしてくれる。今回はあえて入れてみたが、なくてもよい。
-
catをgrepに変えて、必要な情報の入った行だけ拾うor不要な行は抜くことも可能(
grep -v "^$"
とすれば空の行は全て捨てられる、など)。
注意点
改行コードがLF になっているようなので、メモ帳でそのまま開くと改行が反映されません。別のエディタを使いましょう。(私は職場ではサクラエディタを、家ではAtomかTyporaを使っています)
雑感・経緯
皆さんはPCでどのようにメモを取って、保存・活用していますか?
業務手順、思案中のコマンド、先輩エンジニアが使っている便利なワンライナーなど、様々なメモをテキストファイルに保存しておく…という機会はきっとあると思います。
しかし、その管理は難しく、業務や日付単位でファイル名を付けたりするものの、あの日あの時あの場所で残したはずのメモが見つからない…ということに陥りがちではないでしょうか。
私は約半年にわたって「日付.txt」を量産してしまったため、約100のテキストファイルから目的の情報を探すのがしんどくなり、これを考えました。探し物が見つからなくても踊るわけにはいきませんし。
何かのお役に立てれば幸いです。
参考
テキストファイルの内容をファイル名付きで表示する
ファイルのタイムスタンプを取得する
How to get filename with the content of the file in PowerShell - Stackoverflow