コマンドを実行すると、両方のコマンドが同じ出力を提供します。ファイルへのソフトリンクとハードリンクを作成しましたが、まだ両方のコマンドが同じ出力を提供します。find -H
との間に違いがありますかfind -L
?
答え1
find
ハードリンクは-links
。シンボリックリンクファイルとして非常に同様に扱われます。
私はfind
あなたにマニュアルページを読んでもらいますが、あなたはすでにそれを読んだとします。マニュアルページは、初心者が理解しにくい難解な言語で書かれています。例は役に立ちます。これを行う:
$ mkdir dir1 dir2 dir3
$ touch dir1/file1 dir2/file2 dir3/file3
$ ln -s dir2 two
$ cd dir1
$ ln -s ../dir3 three
$ cd ..
$ ls -lR # I have deleted my user name from the below.
.:
total 1
drwxr-xr-x 1 0 Sep 4 13:08 dir1
drwxr-xr-x 1 0 Sep 4 13:08 dir2
drwxr-xr-x 1 0 Sep 4 13:08 dir3
lrwxrwxrwx 1 4 Sep 4 13:08 two -> dir2
./dir1:
total 1
-rw-r--r-- 1 0 Sep 4 13:08 file1
lrwxrwxrwx 1 7 Sep 4 13:08 three -> ../dir3
./dir2:
total 0
-rw-r--r-- 1 0 Sep 4 13:08 file2
./dir3:
total 0
-rw-r--r-- 1 0 Sep 4 13:08 file3
$ find dir1 two
dir1
dir1/file1
dir1/three
two
$ find -P dir1 two # This is the default; i.e., same as the above.
dir1
dir1/file1
dir1/three
two
$ find -H dir1 two
dir1
dir1/file1
dir1/three
two
two/file2
$ find -L dir1 two
dir1
dir1/file1
dir1/three
dir1/three/file3
two
two/file2
気づく:
- デフォルトの動作(つまり、
-P
動作)では、find
どのシンボリックリンクも従わない。two
(最上位ディレクトリにあります)dir1/three
単にオブジェクトとして報告されます。 - 下には
-H
シンボリックリンクtwo
→が指定されているので(つまり、 に位置することがわかる)dir2
file2
dir2
two
~へfind
コマンドライン。dir1/three
それでもオブジェクトとして報告されます。 - 以下には
-L
両方のシンボリックリンクが続きます。 →リンクfile2
に従ったのでわかります。 →リンクに従ったからです。two
dir2
file3
dir1/three
../dir3
これまで明確ではない場合(デフォルトではなく)、私の例find
でコマンドを実行して、リストの表示方法と方法に特別な注意を払ってください。シンボリックリンクが見えます。-ls
-print
two
three
ファイルとして
さまざまなオプションに応じて、さまざまなレポートもあります。
別の例は次のとおりです。
$ ln -s /bin/sh mysh
$ find . -size +9
$ find -H . -size +9
$ find -L . -size +9
./mysh
シンボリックリンク./mysh
は小さいです。を指すが/bin/sh
、これはかなり大きなファイルです。でテストした結果、-size
under(デフォルト)と./mysh
underは小さいものとして扱われますが、underはより大きいものとして扱われます。これは、「リンクが指すファイルの表示」を意味するからです。-P
-H
-L
-L
他の例:
find . -type f
(およびfind -H . -type f
)は通常のファイルのみを検索します。find . "(" -type f -o -type l ")"
通常のファイルと(すべての)シンボリックリンクが見つかります。find -L . -type f
通常のファイルとシンボリックリンクが見つかります。一般ファイルを指します。。 (また、ディレクトリツリーにディレクトリへのシンボリックリンクが含まれている場合 それらディレクトリも検索されます。 )