ファイルが作成された月を表示します(生成象限ごとにファイルをグループ化)。

ファイルが作成された月を表示します(生成象限ごとにファイルをグループ化)。

ファイルが生成された象限ごとにファイルをグループ化しようとしています。私が望むのは、ファイルがいつ作成されたかを確認することです。たとえば、次のようなファイルがあるとします。

-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ソートするには-Uls象限を押してから、同じ象限にあるファイル名をクリックします。

このbyquadrant関数は、象限番号と元のファイル名で構成される文字列を返します-。これは、oglob omを取得するためにglob修飾子を使用するようにzshに指示することですo+<functionname>

シンボリックリンクの場合、zshs stat(GNUなどdate -r)はデフォルトでシンボルのmtimeを取得します。ターゲットシンボリックリンク。-Lシンボリックリンク自体のランタイムが必要な場合は、それを追加してください。

GNUの実装を使用するにはstatzsh数年が経過し、GNUと互換性がなく、数十年前でfind使い-printfやすさがはるかに低い)、それをタイムスタンプ形式(iso8601またはrawエポック時間)にエクスポートする必要があります。それ以外の場合は月を抽出します。

たとえば、dateGNU を再利用できます。

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)がありますが、ドキュメントとしてはあまり役に立たないと思いました。作る時間比最後の修正(生成時間で見ることができます)コンテンツファイル)。

関連情報