man find
によると:
-ls
真;現在のファイルをls -dils形式で標準出力にリストします。環境変数POSIXLY_CORRECTが設定されていない限り、ブロック数は1Kブロックです。この場合、512バイトのブロックが使用されます。ファイル名の異常な文字がどのように処理されるかについては、NUSUAL FILENAMESセクションを参照してください。
ls -dils
の部分がわかりません。
man ls
には、「-dリストディレクトリ自体であり、内容ではありません」。
3つの.pngファイルを含むフォルダーを考えてみます。
$ ls
01-default.png 02-jungle.png 03-snow.png
$
私は得る
$ find . -type f -ls
12983011 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 ./01-default.png
12982994 24 -rw-rw-r-- 1 dkb dkb 21857 Mar 10 17:28 ./03-snow.png
12983031 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 ./02-jungle.png
$
ただし、-ls
がls -dils
と同じ意味である場合、ls -dils
と同様のものが表示されますが、取得するのは
$ ls -dils
13631944 4 drwxrwxr-x 2 dkb dkb 4096 Aug 30 21:22 .
$
一方、ls -ils
は、find
を-ls
で使用した場合に得られるものに似ています。
$ ls -ils
total 80
12983011 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 01-default.png
12983031 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 02-jungle.png
12982994 24 -rw-rw-r-- 1 dkb dkb 21857 Mar 10 17:28 03-snow.png
$
ですから、man find
ページにタイプミスがあるのか、質問の冒頭で引用した部分のls -dils
が本当にls ils
なのか疑問に思っていました。
見つかったファイルごとに、-ls
アクションを指定したfind
コマンドはそのファイルを置き換えたときにこのコマンドが表示するものと同様の形式で表示されますpath
そのファイルのパス:
ls -dils path
つまり、-ls
を指定したfind
は、start withls -dils
を実行する多くのコマンドを実行するのと同じで、見つかったファイルごとに1つです。 notは、パス引数なしでこの実際のコマンドを実行するのと同様です。
ls -dils
ls
コマンドは、パス引数なしで実行すると特別な動作を示します。単一のパス引数.
が渡されたかのように動作します。 find
コマンドと-ls
の動作をパス引数なしのls
コマンドの動作と比較してきましたが、その動作をls
withパス引数の動作と比較する必要があります。たとえば、これを試してください:
ls -dils ./*
(以下で説明するように、ls
はその出力をソートするため、さらに良い比較は、各filename
に対して1つずつ、多くの個別のls -dils ./filename
コマンドと比較することになります。)
これらの特定のファイルの場合、出力は-d
があってもなくても同じです。ただし、find
はディレクトリを検索できます。ディレクトリを作成し、-d
とls -dils ./*
の両方を試すことにより、ls -dils ./*
オプションがある場合とない場合のls
コマンドの違いを確認できます。例えば:
ek@Cord:~/tmp$ touch a b c
ek@Cord:~/tmp$ mkdir d
ek@Cord:~/tmp$ ls -dils ./*
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
ek@Cord:~/tmp$ ls -ils ./*
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
./d:
total 0
find
with -ls
は、多くの個別のls -dils path
コマンドを実行するのと似ているであるため、特定のls
コマンドと同じように動作するわけではありません。 (-somewhatはls -dils paths...
と同じように動作しますが、-paths...
はfind
が検出したすべてのパスですが、ls
コマンドが出力を並べ替えるので、これと似ているわけではありませんなので、結果はしばしば異なる順序で表示されます。)
これを確認するもう1つの方法は、-ls
アクションを含むディレクトリが結果に含まれるfind
コマンドを実行し、次に-exec
アクションを使用する対応するfind
コマンドを実行して、さまざまなオプションを指定して実際のls
コマンドを実行することです。例えば:
ek@Cord:~/tmp$ find . -ls
54043195528455285 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 .
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
ek@Cord:~/tmp$ find . -exec ls -dils {} \;
54043195528455285 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 .
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
ek@Cord:~/tmp$ find . -exec ls -ils {} \;
total 0
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 d
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
total 0
-d
なしで-ls
を実行するバージョンでは、a
、b
、c
、およびd
に対して表示される最初のエントリは、パス.
を使用したfirstls
コマンド実行の出力です。これを確認するには、-ok
の代わりに-exec
を使用してみてください(対話的に動作し、各コマンドの前にプロンプトを表示するため、どのコマンドがどの出力を生成するかを明確にします)。