Linux
 Computer >> コンピューター >  >> システム >> Linux

LinuxとmacOSでfdコマンドを使ってファイルを素早く検索する方法

fdは、従来のfindコマンドのシンプルな代替ツールです。簡潔な構文と短いコマンド体系を採用しており、入力の手間を大幅に減らせるのが特徴です。ただし、その簡潔さゆえに、初めて見たときには意味が分かりにくいという側面もあります。さらにfdは、標準のfindコマンドよりもパターンマッチングを高速に実行できる点も魅力です。この記事では、LinuxおよびmacOSでfdを使う方法を詳しく解説します。

Linuxへのfdのインストール

fdは、デフォルトでインストールされているシステムは多くありません。お好みのパッケージマネージャーでダウンロード・インストールすれば、ターミナルからすぐに利用できるようになります。

Ubuntu

Ubuntu 19.04(Disco Dingo)以降では公式に提供されていますが、それ以外のバージョンでは手動でのダウンロード・インストールが必要です。UbuntuをはじめとするDebian系ディストリビューションでは、以下のコマンドを実行してください。

wget https://github.com/sharkdp/fd/releases/download/v7.3.0/fd-musl_7.3.0_amd64.deb
sudo dpkg -i fd-musl_7.3.0_amd64.deb

32ビット版や別のビルドが必要な場合は、fdのGitHubリリースページからダウンロードできます。

Debian

Debian Buster以降であれば、公式のDebian管理リポジトリからfdをインストールできます。

sudo apt-get install fd-find

Fedora

Fedora 28以降では、公式パッケージとしてfdをインストール可能です。

dnf install fd-find

Arch Linux

Arch Linuxのユーザーも、公式リポジトリからfdを入手できます。

pacman -S fd

Gentoo Linux

Gentooユーザーは、以下のコマンドでfdのebuildを取得・インストールします。

emerge -av fd

macOS

macOSの場合は、まずHomebrewをインストールし、その後以下のコマンドでfdを導入します。

brew install fd

fdの基本的な使い方

fdのコマンドはfd パターンという非常にシンプルな構造です。findコマンドのfind . -iname 'パターン'と比べると、その簡潔さがよく分かります。

ファイル名を指定して検索するには、次のように入力します。

fd ファイル名

これにより、カレントワーキングディレクトリ以下(サブディレクトリを含む)が検索されます。特定のディレクトリの中だけを検索したい場合は、検索語の後ろにパスを指定しましょう。

fd ファイル名 /path/to/search

検索結果に対してコマンドを実行する

findと同様に、fdにも見つかったファイルを別のコマンドへ渡して実行する機能があります。findではfind . -iname パターン -exec コマンドと記述しますが、fdでは-xフラグを使うだけです。

fd -e zip -x unzip

このコマンドは、ディレクトリ内のすべてのzipファイルをunzipコマンドに渡して展開します。実行コマンド内では、以下のプレースホルダー記号を使うことで、情報を柔軟に渡せます。

  • {}:検索結果のフルパスに置き換わります(files/images/portrait.jpg)。
  • {/}:結果のファイル名のみ(basename)に置き換わります(portrait.jpg)。
  • {//}:見つかった項目の親ディレクトリに置き換わります(files/images)。
  • {.}:拡張子を除いたパスに置き換わります(files/images/portrait)。
  • {/.}:拡張子を除いたbasenameに置き換わります(portrait)。

実際に、上記プレースホルダーのうち2つを組み合わせた例を見てみましょう。

fd -e flac -x ffmpeg -i {} -c:a libopus {.}.opus

このコマンドは、見つかったすべてのFLACファイルをffmpegでOpus形式に一括変換します。

覚えておきたい便利なfdオプション

  • -e:指定した拡張子のファイルのみを検索します(ドットは付けません)。
  • -E パターン:指定したパターンに一致する結果を除外します。
  • --changed-newer-than 日付|期間:ファイルの更新日時で結果を絞り込みます。指定した日時より後に更新されたファイルだけを表示します。現在から遡る期間(10h1d35minなど)や、具体的な日時("YYYY-MM-DD HH:MM:SS")で指定できます。
  • --changed-older-than 日付|期間:上記とは逆に、指定した日時よりに編集されたファイルを表示します。
  • -t:指定した種類の項目だけを表示します(-tf=ファイル、-td=ディレクトリ、-tx=実行可能ファイル、-tl=シンボリックリンク、-te=空ファイル)。
  • -p:ファイル名だけでなく、パス全体を検索対象にします。
  • -s:大文字と小文字を厳密に区別します。デフォルトでは、検索パターンに大文字が含まれない限り、大文字小文字は無視されます。
  • -H:隠しファイルや隠しディレクトリも結果に含めます。
  • -L:シンボリックリンク先のディレクトリを辿って検索します。

fdは、findコマンドの優れた代替手段といえます。「findコマンドは使いこなしづらい」と感じている方なら、fdの方が直感的に操作できるでしょう。ぜひ一度試してみて、その速さと手軽さを体感してみてください。

  1. 【findコマンド徹底解説】Linuxでファイルやディレクトリを柔軟に検索する方法

    Linuxのfindコマンドは、Linuxシステムにおいて最も重要かつ便利なコマンドの一つです。その名の通り、自分で設定したさまざまな条件や変数に基づいて、Linuxマシン上のファイルを検索できます。パーミッション、ユーザー、グループ、ファイルタイプ、日付、サイズなど、多彩な条件を組み合わせて目的のファイルを見つけられるのが特徴です。この記事では、findコマンドを使ってLinux上でファイルを検索する方法を詳しく解説します。 findコマンドはほとんどのLinuxディストリビューションにデフォルトで搭載されているため、追加でパッケージをインストールする必要はありません。 カレントディレクト

  2. Linuxのteeコマンド使い方ガイド|画面表示とファイル保存を同時に実現

    Linuxシェルでパイプやリダイレクトを使っているなら、teeコマンドの出番もきっとあるはずです。teeは「標準出力に表示しながら、同時にファイルにも書き込む」ことができる便利なユーティリティです。この記事では、teeコマンドの基本操作から、sudoとの組み合わせ、追記モード、エラー出力の扱い方まで、実例を交えながら詳しく解説します。 teeコマンドとは何をするもの? まず、次のようなコマンドを見てみましょう。 ls このコマンドは、現在のディレクトリの内容を表示します。つまり、標準出力(stdout)へ出力するわけです。標準出力とは通常、画面、正確には仮想端末のディスプレイのことです