Linux ヒント:ファイルを古さ順に一覧表示する

はじめに

長い間触れられていないファイルをディレクトリ内から見つける方法を考えたことはありますか?古いファイルの整理、データのアーカイブ、古くなったファイルの確認など、どのような場合でも、Linux のfindコマンドが頼りになる解決策です。このヒントでは、シンプルでありながら強力なコマンドを使って、Linux でファイルを古さ順に一覧表示する方法を紹介します。


コマンド

find /path/to/files -type f -name '*.jpg' -mtime +30 -exec ls -l {} \;

このコマンドを使うと、最終更新日に基づいてファイルを特定し、種類や名前で絞り込み、詳細情報を表示できます。


コマンドの内訳

1. /path/to/files

検索対象のディレクトリを指定します。調べたい実際のフォルダパスに置き換えてください。

  • 例:写真ライブラリを検索したい場合は、~/Pictures.

2. -type f

-typeオプションは、検索する項目の種類を指定します。

  • f:ファイルのみを指します(ディレクトリは無視します)。

3. -name '*.jpg'

ファイル名や拡張子に基づいて結果を絞り込みます。

  • 例:*.jpgは次のものを検索します。末尾が.jpg.
  • 他のパターンに置き換えることもできます。たとえば、*.txtはテキストファイル用、*.logはログファイル用です。

4. -mtime +30

これが、ファイルの古さに基づいてファイルを絞り込むための鍵となります。

  • +30:30 日以上前に最終更新されたファイルを検索します。
  • 30を、ニーズに合わせて任意の数値に置き換えてください:
    • 1 年:-mtime +365.
    • 1 週間:-mtime +7.

5. -exec ls -l {} \;

見つかったファイルをどう処理するかを Linux に伝えます。

  • -exec:各ファイルに対してコマンドを実行します。
  • ls -l:各ファイルの詳細情報(サイズ、権限、所有者、最終更新日など)を一覧表示します。
  • {}:見つかった各ファイルのプレースホルダー。
  • \;:コマンドの終わりを示します。

上級者向けヒント

ls -lを実行せずにコマンドをテストしたい場合は、-execの部分を省略してください:

find /path/to/files -type f -name '*.jpg' -mtime +30

これにより、追加の詳細なしにファイルパスのみが一覧表示されます。


このコマンドを使う理由

findコマンドは非常に汎用性が高く、システムメンテナンスの作業に役立ちます:

  • ディスク容量を解放する:古いファイルを特定して削除します。
  • 古いデータをアーカイブする:数か月または数年間触れられていないファイルをバックアップストレージに移動します。
  • 古くなったファイルを監視する:重要なディレクトリ内の古いファイルを確認します。

実践例

例 1:古いドキュメントを検索する

.docxファイルをDocumentsフォルダ内で 90 日以上更新されていないものを検索します:

find ~/Documents -type f -name '*.docx' -mtime +90 -exec ls -l {} \;

例 2:6 か月以上経過した大きなファイルを特定する

100MB を超えるファイルを、次の場所から検索します:/home/userのうち、6 か月以上更新されていないもの:

find /home/user -type f -size +100M -mtime +180 -exec ls -lh {} \;
  • -size +100M:100MB を超えるファイルを絞り込みます。
  • ls -lh:ファイルサイズを人間が読みやすい形式(MB、GB など)で表示します。

例 3:古い PDF を検索する

.pdfファイルを/home/user/Downloads内で、直近 1 年間に更新されていないものを検索します:

find ~/Downloads -type f -name '*.pdf' -mtime +365 -exec ls -l {} \;

例 4:最近更新されたファイルを検索する

.txtファイルのうち、直近 7 日間に更新されたものを、次の場所から検索します:/var/www:

find /var/www -type f -name '*.txt' -mtime -7 -exec ls -l {} \;
  • -mtime -7:直近 7 日以内に更新されたファイルを検索します。

例 5:古い一時ファイルを削除する

次の場所にあるファイルを削除します:/tmpのうち、30 日以上更新されていないもの:

find /tmp -type f -mtime +30 -exec rm {} \;
  • rm:ファイルを削除します。
  • 警告:ファイルを完全に削除するため、慎重に使用してください。

例 6:古いメディアファイルをアーカイブする

.mp4ファイルのうち、60 日以上経過したものを、~/Videosからアーカイブフォルダへ移動します:

find ~/Videos -type f -name '*.mp4' -mtime +60 -exec mv {} ~/Archives/ \;
  • mv:指定したフォルダにファイルを移動します。

例 7:特定の期間内に作成されたファイルを検索する

.logファイルのうち、30 日前から 60 日前の間に作成されたものを、次の場所から検索します:/var/log:

find /var/log -type f -name '*.log' -mtime +30 -mtime -60 -exec ls -l {} \;
  • -mtime +30:30 日以上経過したファイル。
  • -mtime -60:直近 60 日以内に更新されたファイル。

例 8:1 週間以上経過した空のファイルを検索する

次の場所にある空のファイルを特定します:/home/userのうち、直近 1 週間更新されていないもの:

find /home/user -type f -empty -mtime +7 -exec ls -l {} \;
  • -empty:サイズがゼロのファイルを絞り込みます。

例 9:アクセス時間でファイルを検索する

.pngファイルを/var/www/html内で、直近 90 日間にアクセスされていないものを検索します:

find /var/www/html -type f -name '*.png' -atime +90 -exec ls -l {} \;
  • -atime:更新日時ではなくアクセス時間でファイルを絞り込みます。

例 10:最近作成されたファイルを検索する

次の場所にあるファイルを特定します:/home/userのうち、直近 3 日以内に作成されたもの:

find /home/user -type f -ctime -3 -exec ls -l {} \;
  • -ctime:作成時間でファイルを絞り込みます。

例 11:権限でファイルを検索する

次の場所にあるファイルを検索します:/etcのうち、特定の権限を持つもの(例:他のユーザーが書き込み可能なもの):

find /etc -type f -perm /o+w -exec ls -l {} \;
  • -perm /o+w:他のユーザーが書き込み可能なファイルを検索します。

例 12:直近 1 時間以内に更新されたファイルを特定する

次の場所で、直近 1 時間以内に更新されたファイルを検索します:/home/user/Documents:

find ~/Documents -type f -mmin -60 -exec ls -l {} \;
  • -mmin -60:直近 60 分以内に更新されたファイルを絞り込みます。

例 13:特定の所有者のファイルを検索する

次のユーザーが所有するファイルを検索します:jose、場所:/var/logのうち、90 日以上更新されていないもの:

find /var/log -type f -user jose -mtime +90 -exec ls -l {} \;
  • -user jose:指定したユーザーが所有するファイルを絞り込みます。

例 14:特定のディレクトリを除外する

.jpgファイルを/home/userのうち、30 日以上経過したもので、次のフォルダを除いたものを検索します:Downloadsフォルダ:

find /home/user -type f -name '*.jpg' -mtime +30 -not -path "~/Downloads/*" -exec ls -l {} \;
  • -not -path:指定したディレクトリ内のファイルを除外します。

例 15:特定の日に更新されたファイルを検索する

次の場所で、ちょうど 10 日前に更新されたファイルを検索します:/home/user:

find /home/user -type f -mtime 10 -exec ls -l {} \;
  • -mtime 10:ちょうど 10 日前に更新されたファイルを検索します。

例 16:特定の拡張子のファイルを特定する

.zipと.tar.gzファイルを、60 日以上経過したものとして、次の場所から検索します:/backups:

find /backups -type f \( -name '*.zip' -o -name '*.tar.gz' \) -mtime +60 -exec ls -l {} \;
  • \( -name '*.zip' -o -name '*.tar.gz' \):複数のファイル拡張子を検索します。

まとめ

Linux のfindコマンドは、ファイルの古さ、種類、名前に基づいてファイルを管理するための強力なツールです。ディスク容量の解放、古いデータのアーカイブ、古くなったファイルの監視など、どのような場合でも、このコマンドを使えばディレクトリを完全に管理できます。

ぜひ今日試して、Linux スキルを次のレベルに引き上げましょう!

コメントを残す