lsの出力が2回印刷される原因は何ですか?
$find . -exec ls -l {} \;
total 340
-rw-rw-r-- 1 w w 163244 Aug 26 19:25 apt-list--installed.txt
-rw-rw-r-- 1 w w 162078 Aug 26 19:25 apt-list.txt
-rw-rw-r-- 1 w w 29 Aug 27 08:29 df1
-rw-rw-r-- 1 w w 31 Aug 27 08:22 df2
-rw-rw-r-- 1 w w 9 Aug 26 23:24 f1
-rw-rw-r-- 1 w w 5 Aug 26 23:21 f2
-rw-rw-r-- 1 w w 27 Aug 27 11:40 o.txt
-rw-rw-r-- 1 w w 9 Aug 26 23:24 ./f1
-rw-rw-r-- 1 w w 163244 Aug 26 19:25 ./apt-list--installed.txt
-rw-rw-r-- 1 w w 27 Aug 27 11:40 ./o.txt
-rw-rw-r-- 1 w w 5 Aug 26 23:21 ./f2
-rw-rw-r-- 1 w w 162078 Aug 26 19:25 ./apt-list.txt
-rw-rw-r-- 1 w w 29 Aug 27 08:29 ./df1
-rw-rw-r-- 1 w w 31 Aug 27 08:22 ./df2
ご覧のとおり、これらのファイルは上記の出力に2回リストされています。なぜ?
答え1
find
これは、見つかったすべてのファイルとディレクトリで実行し、ディレクトリから実行するとデフォルトでその内容が一覧表示されるために発生します。したがって、各ファイルは処理されるようにリストされます。ls
ls
find
そして含まれているディレクトリを処理するとき。
これを回避するには、ls
すべてをファイルとして処理するように指示するか(ls -ld
)、ファイルがある場合はfind
'に似た出力()を使用するように指示できます。両方とも、ファイルと同じ方法でディレクトリを別々に一覧表示します。ファイル形式をフィルタリングしてこれを防ぐことができます。ls
find . -ls
例えば -type f
)。