最後に変更された10個のファイルを見つけるにはどうすればいいですか

最後に変更された10個のファイルを見つけるにはどうすればいいですか

ルート フォルダーにいて、このフォルダーの最後に変更された 10 個のファイルを見つける必要があります。講師が言ったように -mtime を入力するたびに、10 日間が表示されます。必要なのは、最後の 10 個の変更されたファイルであって、最後の 10 日間分ではありません。find -my time、つまりパイプで tail された my time を試しました。過去 10 日間に変更されたすべてのファイルの長いリストが表示されます。必要なのは、ルート ディレクトリの最後に変更された 10 個のファイルだけです。

答え1

ls -t | headファイル名に改行が含まれていない限り、動作するはずです。

ls -t時間順に並べ替え、最新のファイルを先頭にします。head上位 10 行のみを保持します。

さらに詳しい情報が必要な場合は を使用できますls -ltが、合計サイズを示す行が先頭に追加されるため が必要になりますls -lt | head -n 11

隠しファイルを含める場合は、 を使用できますls -At | head( ls -A、またはGNU ls の場合はと--almost-allを除く隠しファイルが含まれます)。...

これにより、通常のファイルだけでなく、ディレクトリを含むあらゆるタイプの最新の 10 個のファイルが提供されることに注意してください。

答え2

ではzsh、現在の作業ディレクトリ以下にある、最後に変更された 10 個の通常ファイルに対して次の処理が行われます。

ls -ldt -- **/*(D.om[1,10])

他のシェルでは、最近の GNU システムを使用していると仮定します。

find . -type f -printf '%T@:%P\0' |
  LC_ALL=C sort -zrn |
  LC_ALL=C sed -z 's/^[^:]*://;10q' |
  xargs -r0 ls -ltd --

サブディレクトリ内のファイルを考慮したくない場合は、 を削除する**/zsh、の後-maxdepth 1に を追加します。find.

隠しファイルを除外するには、Dの glob 修飾子を削除するzshか、find行を次のように変更します。

LC_ALL=C find . -name '.?*' -prune -o -type f -printf '%T@:%P\0' |

またはサブディレクトリ内のファイルも除外する場合:

LC_ALL=C find . -maxdepth 1 ! -name '.*' -type f -printf '%T@:%P\0' |

これらは、ファイル パスにどのような文字または非文字が含まれるかについては想定しません。

関連情報