使い方

参考:

find コマンド | hydrocul のメモ

find コマンドで覚えておきたい使い方12個 (+1個) | 俺的備忘録 〜なんかいろいろ〜

find コマンドの使い方 | UNIX/Linux の部屋

find コマンドの実用 | 方向性未定のブログ

Linux でファイルを探すときに使うコマンド メモ – Qiita

find コマンド 基本編 – ファイルをさまざまな条件で検索する | @IT

find – ファイルやディレクトリを検索するコマンド | renoji.com

リファレンス

参考:

Man page of FIND | JM Project

式 (expression)

コマンドライン上で探索開始点のリストの後ろに続く部分は、「式 (expression)」である。 式は、いわば問い合わせの細目のようなものであり、 どういうファイルがマッチするのかと、そのマッチしたファイルをどう処理するのかを記述している。 式は一連の要素からなっており、そうした式の要素、 特にオプション、検査、アクションをまとめて「述語 (predicate)」と呼ぶ。

-name

-name pattern

ファイルやディレクトリのベースネーム (パスから最後の要素だけを残して、先行するディレクトリを取り去ったもの) が、シェルのパターン pattern にマッチすれば、真を返す。

-path

-path pattern

ファイル名がシェルのパターン pattern にマッチすれば、真を返す。 メタ文字は、/. を例外扱いしない。

-not

-not expr

! expr と同じだが、POSIX 準拠の表現ではない。

-o / -or

expr1 -o expr2

or 結合である。expr1 が真ならば、expr2 は評価されない。

expr1 -or expr2

expr1 -o expr2 と同じだが、POSIX 準拠の表現ではない。

-a / -and

expr1 -a expr2

expr1 expr2 と同じ。

expr1 -and expr2

expr1 expr2 と同じだが、POSIX 準拠の表現ではない。

( expr )

\( expr \)

カッコの内側を先に処理する。カッコはシェルによって解釈されないようにクォートする必要がある。

-print

パス付きのファイル名を標準出力に表示し、各ファイル名の後ろに改行文字を付ける。真を返す。

-print0

パス付きのファイル名を標準出力に表示し、各ファイル名の後ろに ( -print が改行文字を付けるのとは違って) ヌル文字を追加する。 このアクションは、xargs-0 オプションに呼応している。真を返す。

-prune

処理対象のファイルがディレクトリの場合は、そのディレクトリ以下に降りて行かない。真を返す。

$ find . -path '*/node_modules/*' -prune -o -name '*.js' -print

パスの途中に node_modules を含むディレクトリを除いて、ファイル名が .js で終わるファイルを探索する。

ヌル文字区切りで出力する

ファイル名に特殊文字 (スペース・タブ・改行など) が含まれている場合、ヌル文字区切りで出力して処理する必要がある。

カレントディレクトリ直下のファイル・ディレクトリを while read でループ処理する。

while read -d "" file; do \
  printf "%q\n" "$file"; \
done < <( find . -d 1 -print0 )

もしくは、グロブで for 文を回す。

for file in *; do \
  printf "%q\n" "$file"; \
done

ディレクトリのみを処理する。

for dir in */; do \
  printf "%q\n" "$dir"; \
done

ファイルのみを処理する。

for file in *; do \
  if [ -f "$file" ]; then \
    printf "%q\n" "$file"; \
  fi; \
done

参考:

Is there a reason why ls does not have a –zero or -0 option – Unix & Linux Stack Exchange

Reading null delimited strings through a Bash loop – Stack Overflow

looping through `ls` results in bash shell script – Super User

結果のパス先頭に付くドットとスラッシュを取り除く

Bash のパラメータ展開を使って取り除く。

while read file; do \
  echo "${file#./}"; \
done < <( find . -d 1 )

もしくは、cut コマンドで取り除く。

while read file; do \
  echo "$file"; \
done < <( find . -d 1 ) \
  | cut -c 3-

参考:

How to remove first dot from a list of file paths – Super User

Removing leading “./” in file paths – Apple Community

正規表現を使う

Mac の場合、-E オプションをつけると -regex に与えた文字列が拡張正規表現として解釈される。

$ find -E . -regex "\./app/assets/images/.*\.(png|jpg|jpeg|svg)"

参考:

macOS の find コマンドで正規表現を使い、複数の拡張子を検索する – Qiita

正規表現に合致するファイル名を find する方法 | grep Tips *

find コマンドでファイル名正規表現検索 | clmemo@aka

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です