ファイルが生成された象限ごとにファイルをグループ化しようとしています。私が望むのは、ファイルがいつ作成されたかを確認することです。たとえば、次のようなファイルがあるとします。
-rwxr-xr-x 1 root wheel 208 Aug 30 16:24 q.sh
私は出力が生成された月だけを出力したいと思います。この場合は8
。
この値を計算したら、それらをソートする簡単なケースの説明に入れることができます。現在、次のような結果が出ました。
#FILE_DATE would be the value I figure out above
case $FILE_DATE in
[1-3])
echo "Quadrant 1"
;;
[4-6])
echo "Quadrant 2"
;;
[7-9])
echo "Quadrant 3"
;;
[10-12])
echo "Quadrant 4"
;;
esac
stat
そのコマンドとフィルタリングされた出力を試しましたが、ls
まだこれを確実に実行する方法が見つかりませんでした。
どんな助けでも大変感謝します。
ありがとうございます!
答え1
GNUを使用すると、date
次のことができます。
quadrant=$(( $(date -r "$file" +'(%-m - 1) / 3 + 1') ))
得るために象限ファイルが最後に変更された場所です。
グローバルソート順をzsh
追加できます。byquadrant
zmodload zsh/stat
byquadrant() {
local month
stat -A month -F %-m +mtime -- ${1-$REPLY}
REPLY=$(( (month - 1) / 3 + 1 ))-$REPLY
}
次のように使用されます。
ls -ldU -- *(o+byquadrant)
たとえば、ここではGNUを使用して独自のソートを無効にするなど、ls
ソートするには-U
ls
象限を押してから、同じ象限にあるファイル名をクリックします。
このbyquadrant
関数は、象限番号と元のファイル名で構成される文字列を返します-
。これは、o
glob omを取得するためにglob修飾子を使用するようにzshに指示することですo+<functionname>
。
シンボリックリンクの場合、zsh
s stat
(GNUなどdate -r
)はデフォルトでシンボルのmtimeを取得します。ターゲットシンボリックリンク。-L
シンボリックリンク自体のランタイムが必要な場合は、それを追加してください。
GNUの実装を使用するにはstat
(zsh
数年が経過し、GNUと互換性がなく、数十年前でfind
使い-printf
やすさがはるかに低い)、それをタイムスタンプ形式(iso8601またはrawエポック時間)にエクスポートする必要があります。それ以外の場合は月を抽出します。
たとえば、date
GNU を再利用できます。
quadrant=$(( $(
set -o pipefail
stat -c%y -- "$file" | date -f - +'(%-m - 1) / 3 + 1'
) ))
GNUはstat
デフォルトでターゲット(およびその逆zsh
stat
)ではなくシンボリックリンクのランタイムを取得します。-L
変更してください。
また、名前がある場合は機能しません-
。
最新バージョンのLinuxでは、最新バージョンのGNUの場合は、次のものを取得する代わりにstat
使用することもできます。%w
%y
出生時間利用可能なドキュメント(ls
最新バージョンのGNUに表示されていますls -l --time=birth
)がありますが、ドキュメントとしてはあまり役に立たないと思いました。作る時間比最後の修正(生成時間で見ることができます)コンテンツファイル)。