-print
同じ結果を生成するので、コマンドでパラメータを使用する-depth
ときの違いは何ですか?find
/home/pkaramol/Desktop/testdir
$ find .
.
./testfile3.txt
./testfile1.txt
./testfile4.txt
./testdir1
./testfile2.txt
./testdir2
/home/pkaramol/Desktop/testdir
$ find . -depth
./testfile3.txt
./testfile1.txt
./testfile4.txt
./testdir1
./testfile2.txt
./testdir2
.
/home/pkaramol/Desktop/testdir
$ find . -depth -print
./testfile3.txt
./testfile1.txt
./testfile4.txt
./testdir1
./testfile2.txt
./testdir2
.
答え1
-print
現在のパス名が標準出力として印刷されていることを確認してください。特定のフラグはパス名のデフォルト印刷をオフにします(-exec
例:)。
-depth
ファイル階層の深さ優先巡回が発生するため、サブディレクトリがないディレクトリのパス名が最初に処理されます(トップダウンではなくボトムアップ)。あなたの例では、サブディレクトリを持たないディレクトリで作業しているときにほとんど違いはありませんが、報告される.
内容に注意してください。後ろに使用されている場合は別のパス名-depth
(.
これは検索する最上位ディレクトリであるため、そのパス名は最後に処理され、-depth
最初に使用されないためです-depth
)。
-depth
これは、ディレクトリを削除したい場合に便利です。find
ディレクトリがないと、削除されたディレクトリにアクセスしようとするとエラーが発生するためです。
Scottが以下のコメントで指摘したように、本当に必要な-depth
とき名前変更ディレクトリの場合も同様です。そうしないと、名前の変更中にディレクトリ構造を参照できなくなる可能性があります。
このフラグは-delete
デフォルトでオンになっています。-depth
例:現在のディレクトリの下で、名前が一致するすべてのディレクトリ*deleteme
(たとえばfolder-deleteme
)を削除し、正常に削除されたディレクトリのパスを印刷します。
find . -depth -type d -name '*deleteme' -exec rm -rf {} ';' -print
次のようなディレクトリ構造を見ると、
$ tree
.
`-- folder-deleteme
`-- another-deleteme
`-- evenmore-deleteme
3 directories, 0 file
上記find
のコマンドを実行してください。いいえ -depth
続く
$ find . -type d -name '*deleteme' -exec rm -rf {} ';' -print
./folder-deleteme
find: ./folder-deleteme: No such file or directory
find
最上位ディレクトリを削除し、folder-deleteme
そのパスを印刷してからそのディレクトリに移動し、削除する別のディレクトリを見つけます。
返品:
$ find .
.
./folder-deleteme
./folder-deleteme/another-deleteme
./folder-deleteme/another-deleteme/evenmore-deleteme
$ find . -depth
./folder-deleteme/another-deleteme/evenmore-deleteme
./folder-deleteme/another-deleteme
./folder-deleteme
.