web-dev-qa-db-ja.com

アクセス時間で再帰的にソートされたリストファイル+ディレクトリパス

LRUスクリプトを実行していますが、20時間作業した後、再帰モードに問題があり、修正できません。

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

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

ファイルをアクセス時間でソートするだけで、ディレクトリを除外したい

お気に入り

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

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

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

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

等..

3
Meow

同様の問題を解決するために非常に一般的に使用される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を使用しますが、noatimeマウントオプションが使用されている場合、またはrelatimeマウントオプションが使用されている場合、アクセスタイムスタンプはまったく記録されないことに注意してください。変更後の最初のアクセスのために変更されました。したがって、最も使用頻度の低いチェックは信頼できません。 (ただし、最近変更されていないリストは非常に信頼性が高く、ユーザーはタイムスタンプを手動で変更できますが、それ以外の場合は自動的に維持されます。)

  • sort 出力を並べ替えます。

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

    -rオプションは、ソート順を逆にするために使用できます(上記のオプションの1つに加えて使用されます)。

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

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

  • uniq は、並べ替え後に複数の連続するアイテムを1つに結合するためによく使用されます。これにより、一意の行のみが出力されます。

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

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

    -dオプションを使用して、フィールドの定義を再定義できます。デフォルトでは、個別のフィールドを空白にします。

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

  • awk はawk言語のインタープリターです。 Awkスクリプトは、基本的にactionsのコレクションであり、コードのスニペットであり、各行に対して(またはすべての処理の前または後に、またはその行(またはレコード)はいくつかのルールに一致します)。

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

3
Nominal Animal

これまでで最も簡単な方法は、 zsh を使用することです。その glob qualifiers は、ファイルのタイプ、タイムスタンプ、およびその他のプロパティに基づいてファイルを照合およびソートできます。

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

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