Согласно man find
:
-ls
Истина; Вывести текущий файл в формате ls -dils на стандартный вывод. Количество блоков составляет 1K блоков, если только не установлена переменная окружения POSIXLY_CORRECT, в этом случае используются 512-байтовые блоки. См. Раздел НЕОБЫЧНЫЕ ФИЛЬМЫ для получения информации о том, как обрабатываются необычные символы в именах файлов.
Я не понимаю часть ls -dils
.
man ls
имеет «сами каталоги -d списков, а не их содержимое».
Рассмотрим папку с тремя файлами .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
в той части, которую я цитировал в верхней части вопроса.
Для каждого файла это находит, find
команда с -ls
дисплеи действия, что файл в формате, подобном тому, что отобразила бы эта команда, когда Вы заменяете path
с путем того файла:
ls -dils path
Это должно сказать это find
с -ls
подобно выполнению многих команд, которые запускаются с ls -dils
, один для каждого файла найден. Это не подобно выполнению этой фактической команды без параметра пути:
ls -dils
ls
управляйте показывает специальное поведение, когда выполнено без параметров пути: это ведет себя как будто единственный параметр пути .
был передан. Вы сравнивали поведение find
команда с -ls
к поведению ls
команда без параметров пути, но необходимо сравнить ее поведение с тем из ls
с параметрами пути. Например, попробуйте это:
ls -dils ./*
(Поскольку ls
сортирует его вывод, как упомянуто ниже, еще лучшее сравнение было бы многим, отделяются ls -dils ./filename
команды, один для каждого filename
.)
С теми конкретными файлами вывод является тем же с и без -d
. Однако find
может найти каталоги. Вы видите различие между ls
команды с и без -d
опция путем создания каталога и попытки обоих ls -dils ./*
и ls -dils ./*
. Например:
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
с -ls
подобно выполнению, многие отделяются ls -dils path
команды, это не ведет себя то же как никакой конкретный ls
команда. (Это действительно ведет себя несколько так же к ls -dils paths...
, где paths...
все пути find
найденный, но это не все это подобное этому также, потому что ls
команда сортирует свой вывод, таким образом, результаты часто появлялись бы в другом порядке.)
Другой способ видеть это состоит в том, чтобы выполнить a find
управляйте, чьи результаты включают каталоги с -ls
действие, и затем выполненный соответствие find
команды, которые используют -exec
действие для выполнения фактический 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
В версии, которая работает -ls
без -d
, первые записи, отображенные для a
, b
, c
, и d
вывод первого ls
выполненная команда, с путем .
. Для проверки этого попробуйте его -ok
вместо -exec
(который работает в интерактивном режиме, предлагая Вам перед каждой командой, и поэтому ясно дает понять, который команды производят который выводы).