find exec lsがファイルの1つを表示しないのはなぜですか?

find exec lsがファイルの1つを表示しないのはなぜですか?

複数のファイルの.shと.sh.bakを示すfind + lsがあります。

私は3つのファイルがあると思ってそのうちの1つをコピーしましたが、
lsはそのうちの1つである.sh.bakを表示しませんでした。

レコードでfind + lsを繰り返してコピーを比較します。

2つのファイルを見る:

[root@localhost jeos]# find / -name del-non-*-locales.sh* -execdir ls -lh {} \;  
-rwxr-xr-x. 1 root root 4.4K Dec 17  2016 /root/proj/vm/locale/backups/del-non-eng-locales.sh.bak  
-rwxr-xr-x. 1 root root 4.4K Dec 17  2016 /root/proj/host.setup/manual/del-non-english-locales.sh  

1コピー

[root@localhost jeos]# cp ~/proj/host.setup/manual/del-non-english-locales.sh .

上矢印+ Enter...これで3つのファイルが見えると思いました。

[root@localhost jeos]# find / -name del-non-*-locales.sh* -execdir ls -lh {} \;  
-rwxr-xr-x. 1 root root 4.4K Dec 17  2016 /root/proj/host.setup/manual/del-non-english-locales.sh  
-rwxr-xr-x. 1 root root 4.4K Nov  9 11:05 /root/proj/jeos/del-non-english-locales.sh

find + lsは何も変更せず、ここにファイルが表示されて終了しました。

[root@localhost jeos]# ls -lh /root/proj/vm/locale/backups/del-non-eng-locales.sh.bak  
-rwxr-xr-x. 1 root root 4.4K Dec 17  2016 /root/proj/vm/locale/backups/del-non-eng-locales.sh.bak

ベストアンサー1

見積もりが必要ですdel-non-*-locales.sh*

最初の実行は現在のディレクトリに一致するファイルがないために機能するため、del-non-*-locales.sh*パターンはデフォルトでそれ自体(アスタリスクとすべてを含む)に拡張されます。

~/proj/host.setup/manual/del-non-english-locales.sh現在のディレクトリにコピーしてdel-non-*-locales.sh*展開するので、del-non-english-locales.sh実際には代わりに正しい名前を検索しますdel-non-*-locales.sh*。そのため、これdel-non-eng-locales.sh.bak以上一致しません。

おすすめ記事