アクセス時間順に再帰的にソートされたファイル + ディレクトリ パスを一覧表示します。

アクセス時間順に再帰的にソートされたファイル + ディレクトリ パスを一覧表示します。

私は LRU スクリプトを作成していますが、20 時間作業した後、再帰モードに修正できない問題が発生しました。

アクセス時間順にファイルをソートして表示するコマンド (--time=atime) が必要です。深さも管理したいのですが、できなくても大丈夫です。

  • メインディレクトリ:
    • ファイル 1
    • ディレクトリ 1 :
      • ファイル 1
      • ファイル2
      • サブディレクトリ 1:
        • ファイル1
        • ファイル2
    • ディレクトリ2:
      • ファイル 1
      • ファイル2
      • サブディレクトリ2:
        • ファイル 1
        • ファイル2
        • サブディレクトリ3:
          • ファイル 1

ディレクトリを除外して、ファイルをアクセス時間順に並べ替えたい

のように

/メインディレクトリ/ディレクトリ1/ファイル1

/メインディレクトリ/ファイル1

/メインディレクトリ/ディレクトリ1/サブディレクトリ1/ファイル2

/メインディレクトリ/ディレクトリ2/サブディレクトリ2/サブディレクトリ3/ファイル1

等..

答え1

同様の問題を解決するためによく使用されるツールが 6 つあります。

  • find特定のエントリに一致するファイルまたはディレクトリを検索します。

    オプション-mindepth-maxdepthオプションは、コマンドがファイルシステム ツリーのどの深さ (指定された名前を基準とし、深さは常に 0) で動作するかを制御します。

    この-typeオプションは、ファイル、ディレクトリ、シンボリック リンク、またはデバイスへの考慮を制限するのに役立ちます。

    -printfオプションは、一致する名前 (ディレクトリ項目) に関する情報を希望の形式でコマンドに出力させるので、非常に便利です。私が特に気に入っているのは、 です。これ%TY%Tm%Td %TT %p\nは、形式 を使って、最終変更の日時と、各行に一致する項目のフルパスと名前を出力しますYYYYMMDD HH:MM:SS.sss PATH。この形式は正しくソートされます。最終アクセスには を使用しますが、マウント オプションが使用されている%AY%Am%Ad %AT %p\n場合、アクセス タイムスタンプはまったく記録されないことに注意してください。また、マウント オプションが使用されている場合、アクセス タイムスタンプは変更後の最初のアクセスに対してのみ変更されます。したがって、最も最近使用されていない項目のチェックは信頼できません。(ただし、最も最近変更された項目のリストはかなり信頼できます。ユーザーはタイムスタンプを手動で変更できますが、それ以外の場合は自動的に維持されます。)noatimerelatime

  • sort出力をソートします。

    、、、、およびオプションは項目の比較方法を定義し、オプションは順序をランダムにします-d-g-h-M-n-R

    この-rオプションを使用すると、並べ替え順序を逆にすることができます (上記のオプションのいずれかに加えて使用します)。

    この-tオプションは、フィールド (列) の定義方法を再定義します。デフォルトでは、空白 (スペースとタブ) で列が区切られます。

    この-kオプションを使用すると、各行のどの部分をソート キーと見なすかを定義することができます。デフォルトでは、行全体が考慮されます。

  • uniqソート後に複数の連続する項目を 1 つに結合するためによく使用され、一意の行のみが出力されます。

  • cut出力の各行から特定の列のみを選択する最も簡単な方法です。

    オプション-fは、印刷するフィールドを選択します。(デフォルトでは、最大 1 つのフィールド (区切り文字なし) を含む行が印刷されます。オプションは、-sそのような行の印刷を抑制します。)

    この-dオプションを使用すると、フィールドの定義を再定義できます。デフォルトでは、空白でフィールドが区切られます。

  • sed強力なストリームエディタであり、正規表現入力に対して、必要に応じてフィルタリングおよび変更を行います。

  • awkawk言語のインタープリタです。awkスクリプトは基本的に行動各行に対して実行される(またはすべての処理の前または後、あるいは行(またはレコード)が何らかのルールに一致する場合)コード スニペット。

この特定の問題は、上記のコマンドのうち 3 つを単純なパイプラインで使用することで解決できます。コマンドを使用して、findツリーの目的の深さにあるファイルを検索し、各ファイルの並べ替え可能な日付と時刻、およびファイルへの相対パスを出力します。出力を並べ替え、各行の日付と時刻の部分を削除して、各行の各ファイルへの相対パスのみを残します。

答え2

最も簡単な方法は翻訳。 そのglob 修飾子種類、タイムスタンプ、その他のプロパティに基づいてファイルを照合および並べ替えることができます。

print -lr -- *(.Doa)
print -lr -- **/*(.Doa)

.最初のコマンドは、現在のディレクトリにあるドットファイル ( ) を含む通常のファイル ( ) の名前を、Dアクセス時間 ( oa) でソートして出力します。2 番目のコマンドは、現在のディレクトリとそのサブディレクトリにあるファイルを再帰的に一覧表示します。

関連情報