1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

複数のテキストメモを1つにまとめるコマンド

Last updated at Posted at 2019-02-23

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行にしてくれる。今回はあえて入れてみたが、なくてもよい。
  • catgrepに変えて、必要な情報の入った行だけ拾うor不要な行は抜くことも可能(grep -v "^$"とすれば空の行は全て捨てられる、など)。

注意点

改行コードがLF になっているようなので、メモ帳でそのまま開くと改行が反映されません。別のエディタを使いましょう。(私は職場ではサクラエディタを、家ではAtomかTyporaを使っています)

雑感・経緯

皆さんはPCでどのようにメモを取って、保存・活用していますか?

業務手順、思案中のコマンド、先輩エンジニアが使っている便利なワンライナーなど、様々なメモをテキストファイルに保存しておく…という機会はきっとあると思います。

しかし、その管理は難しく、業務や日付単位でファイル名を付けたりするものの、あの日あの時あの場所で残したはずのメモが見つからない…ということに陥りがちではないでしょうか。

私は約半年にわたって「日付.txt」を量産してしまったため、約100のテキストファイルから目的の情報を探すのがしんどくなり、これを考えました。探し物が見つからなくても踊るわけにはいきませんし。

何かのお役に立てれば幸いです。

参考

テキストファイルの内容をファイル名付きで表示する
ファイルのタイムスタンプを取得する
How to get filename with the content of the file in PowerShell - Stackoverflow

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?