GNU/Linux >> Linux の 問題 >  >> Linux

Linuxで日付別にファイルを再帰的に検索して一覧表示する方法

ほとんどのオペレーティングシステムユーザーが他のオペレーティングシステムよりもLinuxを選択する主な理由は、探索の自由です。 Linuxでは、いくつかの緩く結合されたオペレーティングシステムのルールに縛られています。 OSは、その環境内で使用するいくつかの変更可能な標準ルールを事前に定義しています。

初心者のコートを脱ぎ捨てたら、これらのデフォルトのルールから抜け出し、独自のルールを作成できます。 Linuxでは、オペレーティングシステムは忠実な使用人であり、マスターです。

抽象化が多すぎるため、このケースは他のオペレーティングシステムディストリビューションでは実行できません。ここでのオペレーティングシステムは、より多くのアシスタントです。 Linuxの場合のように、オペレーティングシステムよりも多くの電力を使用することはできません。 Linux OS環境でユーザーエクスペリエンスを構築し続けると、OSの好奇心は日々高まります。ここに何が隠されているのか、そしてその傘の下で何ができるのかを常に知りたいと思うでしょう。

Linuxでのファイルとディレクトリの操作

完璧なシナリオは、Linuxオペレーティングシステム環境でのファイルやフォルダーとの日常的なやり取りです。 Linux OSファイルシステムを使用することには、ユーザーファイルシステムとフォルダーを作成、編集、変更、および削除するだけではありません。 Linux環境でユーザーファイルおよびフォルダー/ディレクトリにリンクされたすべてのアクションは、ユーザーのフットプリントまたはフィンガープリントを残します。部屋に入ってアイテムに触れたり交換したりするようなものです。

Linuxの家主または世話人が、あなたが入ったこの部屋を管理している場合、あなたが何をしたか、どのアイテムに触れたか、交換したかを正確に知ることができます。 Linuxには、このような結果を達成するのに役立つ便利なコマンドがあります。 Linux OSのファイルとフォルダーに何が起こったかを知り、それらがいつ起こったかに基づいてこれらのアクションを識別します。

つまり、Linuxオペレーティングシステム環境でファイルとディレクトリを処理する場合、イベントタイムラインを作成して、各変更に添付されたタイムスタンプを通じて脆弱なファイル変更を特定できます。利点として、生成されたシステムログを通じて、変更が悪意のあるコンテンツに関連付けられているかどうかを知ることができます。

使用するLinuxコマンド

この記事の客観的な意味を理解するのに役立ついくつかの簡単なコマンドをパイプでつなぎます。まず、ターミナルを起動して、多くのファイルとフォルダディレクトリがあることがわかっているシステムパスをナビゲートする必要があります。安全を確保し、脆弱なシステムファイルをいじらないようにするために、通常Linuxオペレーティングシステムで事前定義されている「Documents」ディレクトリを使用できます。次のコマンドで、この「ドキュメント」ディレクトリに移動します。

$ cd ~/Documents

これは、多くのファイルとサブディレクトリがある人気のあるディレクトリです。この記事の実験に使用するもう1つのディレクトリは、「ダウンロード」ディレクトリです。ダウンロードしたファイルやその他のサブディレクトリを見逃すことのない1つの場所です。

$ cd ~/Downloads

この実験を開始するには、端末からの関連性のあるサンプル出力が必要です。端末にコマンド文字列を入力して、アクティブなファイルとそれに関連するサブディレクトリを一覧表示できるようにします。また、このコマンドの結果の出力の各要素は、関連付けられたファイル、ディレクトリ、またはサブディレクトリでの最後の変更の試行を指すタイムスタンプにリンクされます。

使用するコマンド文字列は次のとおりです。

$ find . -printf '%T@ %t %p\n' | sort -k 1 -n | cut -d' ' -f2-

以下のスクリーンショットは、上記のコマンド文字列を使用した場合の出力です。

分析の観点から、コマンド出力の下部の画面は、親の作業ディレクトリで最近変更された項目を表しています。マシン上にあるファイルやフォルダによっては、出力リストが長くなる場合があります。出力端末を上にスクロールすると、古いファイルとフォルダの変更が表示されます。要約すると、最も古いファイルとフォルダの変更を最新の変更にランク付けする出力があります。

お気づきのとおり、端末に貼り付けた上記のコマンド文字列には、3つの重要なコマンド引数があります。それぞれが何をするのかを理解する必要があります。

検索

「find」コマンドは、コマンド文字列から実行する最初のコマンドです。これは、親の作業ディレクトリにあるアクティブなファイルとディレクトリを再帰的に一覧表示することを唯一の目的としています。 「。」 「find」引数に続く引数は、このコマンドが現在の作業ディレクトリを指していることを示します。現在のディレクトリがわからない場合は、端末で「pwd」コマンドを入力できます。現在下にあるディレクトリへのパスが出力されます。

「。」引数は「pwd」コマンドの出力として変換されます。これにより、現在の作業ディレクトリのファイルとディレクトリを簡単に見つけることができます。コマンド文字列の次の引数は「-printf」です。これは、print引数のフラグです。現在の作業ディレクトリにあるファイルとディレクトリを指定された形式で印刷します。使用する形式は、引数「%T @%t%p\n」で指定されます。直後に続くのはコマンド引数です。

この引数の「%T @」の部分は、エポックタイムを表します。定義上、エポック時間またはUnixエポックは、1970年1月1日のタイムスタンプです。00:00:00UTCとして表されます。端末の出力は、リストされたファイルとディレクトリに関連付けられた変更日を表すためにこの形式を取ります。引数の「%t」部分は、エポックタイム形式を使用して、リストされたファイルとディレクトリに関連付けられた最新の変更タイムスタンプを表示するようになりました。

Linuxディストリビューションまたはフレーバーによっては、ターミナル出力に、変更されたファイルの出力リストに関連付けられたエポックタイムが表示されない場合があります。このステートメントは、私の終わりからの出力の証拠です。

引数の「%p」部分は、その現在の作業ディレクトリに表示されているファイルの名前を出力します。最後に、引数の「/ n」部分は、改行文字の目的を果たします。変更されたファイルが連続してリストされるたびに、この改行文字は表示カーソルを取り、次のファイル表示をスキップして端末画面の新しい行に移動します。表示された各ファイルを異なる方法で関連付けることが容易になります。

前述のコマンド文字列を操作する別のアプローチは、「%T @%t%p \ n」引数の「%t」部分を「%c」に置き換えることです。結果のコマンド文字列は次のようになります。

$ find . -printf '%T@ %c %p\n' | sort -k 1 -n | cut -d' ' -f2-

このコマンド文字列を実行すると、次のスクリーンショットのような出力が生成されます。

上のスクリーンショットをよく見ると、次のことがわかります。現在の作業ディレクトリにあるファイルの出力リストは、「変更時刻」ではなく「最終ステータス変更時刻」で表示されます。これは、「%T @%t%p \ n」の「%c」を「%t」に置き換えた効果です。この最後のコマンドは、出力されたファイルリストに関連する権限の変更を出力します。ファイルの内容は変更されない可能性がありますが、ファイルに関連付けられているメタデータは変更されます。

この段階では、まだsortコマンドに対応していないため、出力結果は時系列に沿っていません。変更タイムスタンプが最初に印刷され、次に関連ファイルの名前が印刷されます。

並べ替え

このコマンド引数には、「-k」、「1」、「n」の3つのパラメータがあります。 sortコマンドは、ファイルリストの出力が画面に表示される順序を担当します。この場合、変更日が最初に印刷され、次に変更されたファイルまたはディレクトリへのファイルパスが印刷されます。このコマンド引数の「-k」部分は、並べ替えプロセスを開始する開始位置を示します。

sortコマンド引数の「-k」部分は、同じ引数の「1」部分によって回答された質問を持っています。この場合、「1」で示されているように、並べ替えプロセスは最初の列から始まります。 sortコマンドの引数は、リストの一番下にある最新の変更されたファイルと一番上の古いファイルにも責任があります。引数の「-n」部分は、小数点以下の精度で時間の数値を処理します。

「-n」の代わりに「-nr」を使用すると、コマンド文字列の出力には、ターミナル出力の上部に新しく変更されたファイルとディレクトリがあり、下部に古いファイルの変更があります。端末出力のソート順を逆にします。

カット

「cut」コマンド引数の主な目的は、端末の印刷出力の出力を整然と整理することです。このコマンド引数の「-d」オプションと「」オプションを組み合わせて空白を生成し、これらの空白を引き継ぐ可能性のあるファイルコンテンツの詳細の印刷出力を切り取ります。

この単純なコマンド文字列を使用すると、現在の作業ディレクトリにあるファイルを再帰的に印刷できます。各出力は、上記のファイルを変更日にリンクします。

代替コマンドオプション

コマンド「ls-lrt」は、Linuxオペレーティングシステム上のActive Directoryパス内のすべてのファイルを、最も古いものから最も新しいものまで、完全に一覧表示すると主張するかもしれません。一方、このコマンドは、サブフォルダーに存在するファイルの内容を考慮しません。サブディレクトリの一覧表示が目的でない場合は、コマンド文字列に「-typef」引数を追加できます。次のコマンドの変更を検討してください。

$ find . -type f -printf '%T@ %t %p\n' | sort -k 1 -n | cut -d ' ' -f2-

「-typed」コマンド引数を使用すると、上記のコマンドとは逆の効果があります。端末は、変更されたディレクトリのみを古いものから新しいものへと出力します。その意味を次のように考えてください:

$ find . -type d -printf '%T@ %t %p\n' | sort -k 1 -n | cut -d ' ' -f2-

最後のメモ

これで、現在の作業ディレクトリにファイルとディレクトリを再帰的に印刷するウォークスルーに精通し、関連するタイムスタンプに基づいて最後に変更されたのはいつかを知ることができます。

この知識から、ファイルとディレクトリの変更の順​​序とそれらの保存場所へのパスを時系列で明らかにするイベントのタイムラインを作成することができます。


Linux
  1. Linuxで変更日時に基づいてファイルを検索およびソートする方法

  2. Linux の find コマンドを使用してファイルを検索する方法

  3. ファイルを再帰的にリストし、変更時間でソートする方法は?

  1. Linuxでディレクトリを再帰的に検索および削除する方法

  2. Linux – Linuxで現在の日付のファイルを取得しますか?

  3. Linux ですべてのスパース ファイルを見つける方法

  1. Linuxで最大のファイルとディレクトリを探す

  2. すべてのファイルとディレクトリを再帰的に一覧表示する方法

  3. Linuxでパーティションのすべてのファイルを一覧表示する方法は?