検索ファイルfind *
との違いは何ですか?find ~
端末で現在の作業ディレクトリを開くと、root
端末で
root@devils-ey3:~# find * -print -quit
~
同じディレクトリに
root@devils-ey3:~# find ~ -print -quit
/root
ただし、変更するとpwd
出力はfind ~ -print -quit
以前と同じですが、他の出力は変更されます。ファイル検索は何を*
しますか?~
答え1
の基本形式find
は
find WHERE WHAT
したがって、find *
と*
見なされますWHERE
。今*
それはワイルドカードです。現在のディレクトリ内のすべてのエントリと一致します(デフォルトで始まるファイル/ディレクトリを除く.
)。 Windowsに該当するのはです*.*
。*
拡大するこれを説明するために、find
次のディレクトリを検討してください。
$ ls
file file2
set -x
デバッグ情報を有効にしてコマンドを実行すると、find
次のようになります。
$ find * -print -quit
+ find file file2 -print -quit
file
上記のように、*
ディレクトリ内のすべてのファイルに展開すると、実際に実行されるのは次のとおりです。
find file file2 -print -quit
そのため、-quit
検索を指定したファイルの最初のファイル名を印刷して終了します。あなたの場合は、というファイルまたはディレクトリがあるように見え、~
それが印刷されます。
ただし、チルダ(~
)には特別な意味もあります。これはあなたのディレクトリへのショートカットです$HOME
:
$ echo ~
/home/terdon
したがってfind ~
、rootとして実行すると、~
これに拡張され、/home/root
実際に実行されるコマンドは次のようになります。
# find ~ -print -quit
+ find /root -print -quit
/root
find
繰り返しますが、特定の場所からファイルまたはディレクトリを検索し、最初の項目を印刷して終了することを意味します。最初に一致するファイルまたはディレクトリが/root
それ自体であるため、これが印刷されます。
答え2
まず、次の構文を覚えておいてくださいfind
。
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
ファイルを検索するときのfind *とfind〜の違いは何ですか?
*
すべてに合うwhileカードです。ここでは、
find *
現在のディレクトリのファイル/ディレクトリのリストと、検索するターゲット名のリストを渡します。したがって、次のファイルと同じ名前のすべてのファイルを検索します。pwd
-
したがって、(ホームディレクトリ)
find ~
内で(再帰的に)ファイルとディレクトリを探します。~
root@devils-ey3:~# find * -print -quit ~
上記の出力には、名前付きファイルまたはディレクトリが必要です~
。/root
(~
as$HOME
ディレクトリと混同しないでください。)
root@devils-ey3:~# find ~ -print -quit /root
説明するfind ~ -print -quit
:-
非常に多様な選択-quit
::
-quit すぐに終了します。子プロセスは引き続き実行されませんが、パスはコマンドに割り当てられなくなりました。 行が処理されます。たとえば、 find /tmp/foo /tmp/bar -print -quit は /tmp/foo のみを印刷します。 -execdir ... {} +で構築されたすべてのコマンドラインは、findが終了する前に呼び出されます。 終了ステータスは、エラーが発生したかどうかに応じてゼロであってもなくてもよい。
~
/root
ルート端末にあるため、ルートと見なされます。-quit
ディレクトリ名のみ印刷
しかし、パスワードを変更すると、find〜-print -quitの出力は以前と同じです...
上記のように:-find ~ -print -quit
印刷/root
パスが~
(/root
ルートシェルのため)に設定されている-quite
。pwd