これらの検索との違いは何ですか?そして発見しました。

これらの検索との違いは何ですか?そして発見しました。

違いは何ですか:

find .

そして

find . -print

実際には何をしますか-print

$ find .
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt
$ find . -print
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt

答え1

~からfindutils findマンページ:

表現が与えられなければ、表現は-print使用(たぶん使用を検討する必要があります。-print0とにかく反対)。

-printfind表現する.)

これPOSIX ドキュメントこれを確認しました:

そうでない場合表現する存在する、-印刷表現として使用する必要があります。

したがって、find .全く同じですfind . -print。最初の項目には表現がないため、-print内部的に追加されます。

-printその意味はマンページで詳しく説明されています。

-print

True の場合、標準出力にファイル名全体を印刷し、その後に改行文字が続きます。 findの出力を別のプログラムにパイプしていて、検索中のファイルに改行文字が含まれる可能性が高い場合は、次のものを使用することを真剣に検討する必要があります。-print0代わりにオプション-print。ファイル名の異常な文字を処理する方法の詳細については、例外ファイル名のセクションを参照してください。

答え2

-printデフォルトです行動。いくつかのfind述語が考慮されます。行動相対的なフィルターまたは状況。たとえば、-type f仕事ではありません。-exec条件として使用することもできますが、作業です。

ジョブには-print-execおよびが含まれます-ok。一部の実装には、、、、...findなどの他の非標準の作業述語があります。-print0-printf-execdir-okdir-ls

find files <some-predicates>

それらのどれもありません<some-predicates>含む行動以下と同じ:

find files \( <some-predicates> \) -print

(上記の括弧に注意してください。-oこれは一部の演算子がある場合は重要です)。

-print不明な場合は明示的に使用することをお勧めします(または出力を後処理するために利用可能な-exec printf '%s\0' {} +場合)。-print0

基本-print操作は POSIX によって指定されます。一部の以前の実装findでは、明示的な要件が必要です。-printしかし、これらは今日の野生では一般的には見られません。

また、一部のfind実装では省略を許可します。filesこの場合、デフォルトでは現在のディレクトリを検索します。つまり、彼らにとって

find
find -print

等しい

find .
find . -print

しかし、これは標準ではないので避けるのが最善です。

より詳細で有用な規模では、いくつかの実装では、次のようにファイルパスをオプションfindの引数として渡すこともできます。-f

find -f "$file1" -f "$file2" -print

findこれは、任意のファイルパスをに渡すことを可能にする唯一のものですfind。他の実装では、!または-print...などのファイルパスを受け入れることができないためfind "$file" -print(たとえfind -- "$file" -print)、これは述語(または最初の場合はオプション)の名前ではないと見なされます$filefind

残念ながら、これは標準でも移植性もありません。

答え3

どちらも同じで、両方とも現在のディレクトリに完全なディレクトリ階層を作成します。

~からPOSIX ルックアップ文書:

次のコマンドは同じです。

探す。

探す。 -印刷

答え4

長年にわたり、findコマンドにはデフォルトの動作はありませんでした。よくある間違いは、findコマンドに-printオプションを追加するのを忘れることです。私は今でも習慣的にタイプしています。

ただし、ある時点では基本操作として追加されたので、これfind .find . -print同じです。

関連情報