拡張子が指定されていない場合、 find -path はファイルと一致しません。

拡張子が指定されていない場合、 find -path はファイルと一致しません。

find仕事をエキサイティングにする大きな仕事の一つ

私がこうすれば:

find -path *ncf

またはこれ:

find -path ncf*

何の結果も得られませんが、結果が出た場合:

find -path *ncf.js

一致するファイルを取得しました。なぜそんなことですか?これは見つけることができるユニークなものですか、それとも大きなものですか?この手紙を書いた人の家の住所を知っている人はいますかfind

答え1

これには2つの問題があります。

  1. それ以外*の場合はシェルによって処理されます(存在する場合は現在のディレクトリのファイルと一致)。

    find -path \*ncf.js
    

    または

    find -path '*ncf.js'
    
  2. 現れる動作は、ワイルドカード式がファイルと一致するという事実に由来します。拡張機能を含む完全なコンテンツ。 (-name拡張子がまだ含まれているファイル名を一致させるために使用されます。)これは具体的ではありません。findファイルを含むディレクトリで試してください。ls

.すべてのバージョンでfindデフォルトとして使用されるわけではありませんが、開始ディレクトリを指定する習慣が必要です。

答え2

他の回答では説明されていないので追加します。

find -path "*ncf"
find -path "*ncf.js"

上記は同じではありません(注:シェルの拡張を防ぐためにglobを引用符で囲みました)。その理由は、1つはで終わり、ncfもう1つはで終わるからですncf.js。これが混乱している場合は、ファイル拡張子の概念を放棄する必要があります。 Unixにはそのような機能はありません。ドットは単なる文字であり、他の方法では扱われません(最初の文字の場合は非表示になり、ディレクトリリストに表示されない場合があります)。

関連情報