【Linux】findコマンド実行時に「照合パターンに合いません」と出力される際の対処

プログラミング
スポンサーリンク

業務で、linuxでのファイル検索時に「照合パターンに合いません」と出力される件で質問があったので、記事ネタとして作成してみました。

検索対象に「*」を指定する際は、「’」(「”」)でくくろう

検索対象に「*」を指定してたんですけど、「’」で括ることで解消しました。

$ find ./ -name *.txt
find: 照合パターンに合いません
⇒NGケース

$ find ./ -name '*.txt'
./file0.txt
・・・
⇒OKケース

エラーが出ない場合でも「’」「”」は必要

なお、上記でエラーにならない場合でも、意図した結果にならない場合があります。

例えば、以下のような構成があったとします。

xxx@xxx:~/find_sample$ ls -Rl
.:
合計 8
drwxr-xr-x 3 xxx xxx 4096  4月 14 18:06 dir1
drwxr-xr-x 2 xxx xxx 4096  4月 14 18:07 dir2
-rw-r--r-- 1 xxx xxx    0  4月 14 18:05 file0.txt

./dir1:
合計 4
drwxr-xr-x 2 xxx xxx 4096  4月 14 18:07 dir1_1
-rw-r--r-- 1 xxx xxx    0  4月 14 18:06 file1.txt

./dir1/dir1_1:
合計 0
-rw-r--r-- 1 xxx xxx 0  4月 14 18:07 file1_1_1.txt
-rw-r--r-- 1 xxx xxx 0  4月 14 18:07 file1_1_2.txt

./dir2:
合計 0
-rw-r--r-- 1 xxx xxx 0  4月 14 18:07 file2.txt
xxx@xxx:~/find_sample$ 

上記ファイル構成として、findコマンド(「*」をくくらない)を実行します。

xxx@xxx:~/find_sample$ find ./ -name *.txt
./file0.txt
xxx@xxx:~/find_sample$ 

「file0.txt」しか検索できていません。

次は、findコマンドで「*」を「’」でくくった場合。

xxx@xxx:~/find_sample$ find ./ -name '*.txt'
./file0.txt
./dir2/file2.txt
./dir1/file1.txt
./dir1/dir1_1/file1_1_1.txt
./dir1/dir1_1/file1_1_2.txt
xxx@xxx:~/find_sample$ 

くくった場合は、指定ディレクトリ配下もファイルも検索できています。

コマンドプロンプトの「*」は置換されている

コマンドプロンプト上での「*」は文字として扱われないです。

(「*」が置換された文字列が当てはめられる。)

これを確認するには「echo」コマンドを使うと分かり易いです。

xxx@xxx:~/find_sample$ echo *.txt
file0.txt

xxx@xxx:~/find_sample$ cd dir1/dir1_1/
xxx@xxx:~/find_sample/dir1/dir1_1$ echo *.txt
file1_1_1.txt file1_1_2.txt

文字として置換されているので、以下の2つのコマンドは同じ意味になります。

find ./ -name *.txt
find ./ -name file0.txt

まとめ

今回はfindコマンド時の注意事項みたいな旨で記載していますが、別にfindコマンドに限らないので、意識するだけでもハマったりしないで済むかもしれません。

コメント

タイトルとURLをコピーしました