findコマンドのパラメータ

findコマンドのパラメータ

-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
.

関連情報