подсчет в каталоге

Я хотел бы знать то, между чем различие:

$ ls | wc -l

и

$ ls > foo
$ wc -l < foo

при подсчете всех файлов в текущих каталогах. И то, почему делает второй, дает мне один файл больше.

1
задан 29 November 2015 в 22:48

2 ответа

Нет никакого различия, действительно. Второй случай также включал бы файл foo в список и поэтому дает Вам количество еще 1.

4
ответ дан 3 December 2019 в 06:59

С чем Вы делаете ls > foo перенаправляет вывод ls в файл. Удивительно достаточно файл создается сначала и включается в вывод ls

   abcd:$ ls                                                                      
a?b  file name

abcd:$ ls > file                                                               

abcd:$ cat file
a
b
file
file name

Перед перенаправлением было два файла a\nb и file name. После перенаправления: 3 файла, file включенный. Это - настоящая проблема в Вашем случае.

Но Вы, вероятно, заметили что-то еще: почему a\nb файл был перечислен на двух строках. Почему? ls может перечислить файлы, но оболочка позволяет почти любой тип символа в имени файла, включая новую строку. Таким образом, когда вывод ls анализируется, может быть ошибочная информация. Для надлежащего подсчета файлов, который является тем, что Ваша главная цель здесь, Вы могли использовать for цикл с шариком оболочки

abcd:$ for FILE in * ; do echo "1";done                                                                                               
1
1
1

Поскольку Вы видите, что это правильно показывает, что у меня есть 3 файла (включая file перенаправленный до)

Для большего количества информации обратитесь к http://www.dwheeler.com/essays/filenames-in-shell.html

0
ответ дан 3 December 2019 в 06:59

Другие вопросы по тегам:

Похожие вопросы: