古い順にソートしたファイルリストを\0区切りで取得する
~/tmpフォルダに改行を含んだファイル名の2つのファイルがあります。
find ~/tmp -type f -printf "%T@ %p\0" | sort -nz
sortはzオプションで\0(ヌル文字)区切りで出力されます。
%T@(Jan. 1, 1970, 00:00 GMT からの経過秒数)でソートした\0区切りのファイルリストが取得できました。
改行が出力されていないので次のプロンプトが続けて表示されています。
あとは%T@を削ればいいはずです。
find ~/tmp -type f -printf "%T@ %p\0" | sort -nz | sed -z 's/[^ ]* //'
sedもzオプションで\0区切りで出力されます。
これで改行文字を含んだファイル名のファイルも一覧に取得できました。
sedで先頭からスペースまでの文字列を削っています。
sedで使える正規表現は監視カメラが生成した264ファイルをmp4ファイルに変換する-p--qでみたBREかEREのみになります。
sedでもPRCEが使えたら便利なのに、と思って調べたらPCRE Regex to SED - Stack Overflowを見つけました。
PCREを使いたければsedでなくてpealを使えばいいそうです。
古いファイルから削除してディスク使用容量割合を保つシェルスクリプト
keepspace.shとして保存しました。
これで改行を含むファイル名のファイルがあっても対応できるはずです。
結局効率がよさそうなので変数を2つ使う次の方法を使うことにしました。
日付順のファイルリストをwhile do done文で表示するパターンいろいろ
sedを使う
変数を2つ使う
Dに経過秒数が入り、Fにファイルパスが入っています。
grepを使う
grepしたあと行頭にスペースが残りますが、IFSと判断されてFに代入されるときは先頭のスペースが消えてくれます。
ただしこの方法が使えるのはgrepのバージョンが2.25以上のときのみです。
それ以前のバージョンではzoオプションを付けても\0区切りで出力されず、改行で出力されてしまいます(bash - How to make grep separate output by NULL characters? - Stack Overflow)。
KDE neonではgrep v3.1なので問題ありませんが、linuxBean14.04ではv2.16なのでバージョンアップしないといけません。
しかし、Grep - GNU Project - Free Software FoundationのIndex of /gnu/grepからgrep-3.4.tar.xzをダウンロードして、ビルドはできましたが、どうやっても-Pオプションを有効にしてビルドする方法がわかりませんでした。
0 件のコメント:
コメントを投稿