私は 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
場合、アクセス タイムスタンプはまったく記録されないことに注意してください。また、マウント オプションが使用されている場合、アクセス タイムスタンプは変更後の最初のアクセスに対してのみ変更されます。したがって、最も最近使用されていない項目のチェックは信頼できません。(ただし、最も最近変更された項目のリストはかなり信頼できます。ユーザーはタイムスタンプを手動で変更できますが、それ以外の場合は自動的に維持されます。)noatime
relatime
sort
出力をソートします。、、、、およびオプションは項目の比較方法を定義し、オプションは順序をランダムにします
-d
。-g
-h
-M
-n
-R
この
-r
オプションを使用すると、並べ替え順序を逆にすることができます (上記のオプションのいずれかに加えて使用します)。この
-t
オプションは、フィールド (列) の定義方法を再定義します。デフォルトでは、空白 (スペースとタブ) で列が区切られます。この
-k
オプションを使用すると、各行のどの部分をソート キーと見なすかを定義することができます。デフォルトでは、行全体が考慮されます。uniq
ソート後に複数の連続する項目を 1 つに結合するためによく使用され、一意の行のみが出力されます。cut
出力の各行から特定の列のみを選択する最も簡単な方法です。オプション
-f
は、印刷するフィールドを選択します。(デフォルトでは、最大 1 つのフィールド (区切り文字なし) を含む行が印刷されます。オプションは、-s
そのような行の印刷を抑制します。)この
-d
オプションを使用すると、フィールドの定義を再定義できます。デフォルトでは、空白でフィールドが区切られます。awk
awk言語のインタープリタです。awkスクリプトは基本的に行動各行に対して実行される(またはすべての処理の前または後、あるいは行(またはレコード)が何らかのルールに一致する場合)コード スニペット。
この特定の問題は、上記のコマンドのうち 3 つを単純なパイプラインで使用することで解決できます。コマンドを使用して、find
ツリーの目的の深さにあるファイルを検索し、各ファイルの並べ替え可能な日付と時刻、およびファイルへの相対パスを出力します。出力を並べ替え、各行の日付と時刻の部分を削除して、各行の各ファイルへの相対パスのみを残します。