違いは何ですか:
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
マンページ:
表現が与えられなければ、表現は
-print0
とにかく反対)。
(-print
find
表現する.)
これPOSIX ドキュメントこれを確認しました:
そうでない場合表現する存在する、-印刷表現として使用する必要があります。
したがって、find .
全く同じですfind . -print
。最初の項目には表現がないため、-print
内部的に追加されます。
-print
その意味はマンページで詳しく説明されています。
True の場合、標準出力にファイル名全体を印刷し、その後に改行文字が続きます。 findの出力を別のプログラムにパイプしていて、検索中のファイルに改行文字が含まれる可能性が高い場合は、次のものを使用することを真剣に検討する必要があります。
-print0
代わりにオプション
答え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
)、これは述語(または最初の場合はオプション)の名前ではないと見なされます$file
。find
残念ながら、これは標準でも移植性もありません。
答え3
答え4
長年にわたり、findコマンドにはデフォルトの動作はありませんでした。よくある間違いは、findコマンドに-printオプションを追加するのを忘れることです。私は今でも習慣的にタイプしています。
ただし、ある時点では基本操作として追加されたので、これfind .
とfind . -print
同じです。