2013-03-27 4 views
0

Я новичок в сценариях оболочки в Linux. Я хочу иметь возможность перечислить количество файлов в моем каталоге, количество каталогов в каталоге и четвертое. Я решил пойти на эту задачу с помощьюПрохождение каждой строки ls

ls -l | cut -c1-1 

Так что, как я могу получить первый символ каждой команды Ls, а затем на основе того, что она есть, сохранить счетчик типа файла, пока все файлы не будут перечислены. Таким образом, пример был бы, если бы я был в папке с кучей файлов и выполнил команду cut сверху, он отобразил бы многие «-» разрешения, указывающие, что это файл.

Мой вопрос в том, что, основываясь на приведенной выше команде, как мне пройти через каждую строку ls? Если я введу команду сверху в оболочку, она просто отобразит все сразу ... Я хотел бы пройти через каждую строку ls.

Спасибо!

Справочника называется Test и содержит

-rw-r--r-- 1 teddy user 31 27 Mar 10:07 test1.txt 
drwx------ 1 teddy user 9 30 Jan 19:18 tooney 
-rw-r--r-- 1 teddy user 31 27 Mar 10:07 test2.txt 
drwx------ 1 teddy user 9 21 Mar 11:32 dirt 
+1

Почему бы не просто направить его на большее? * | подробнее * –

+0

@MichaelGardner Не думал об этом, но если он работает, то почему бы и нет :). Можете ли вы привести пример? Спасибо – Teddy13

+0

Не могли бы вы привести пример или два из того, как должен выглядеть результат или что вы хотите сделать, в зависимости от того, что указано в списке? –

ответ

3

Используя свой метод, вы можете вычислить итоговые используя uniq, например:

$ ls -l | cut -c1-1 | sort | uniq -c 
    214 - 
    13 d 
     2 l 
     1 t 

uniq -c подсчитывает количество последовательных вхождений строки, и sort просто ставит их в какой-то упорядоченном, так что же типы заканчиваются вместе.

Если вы хотите, чтобы эти результаты в переменных, то что это было бы проще:

dirs=0 
files=0 

for name in * 
do 
    if [[ -d "$name" ]] 
    then 
     ((dirs++)) 
    elif [[ -f "$name" ]] 
    then 
     ((files++)) 
    # Possibly other things you want to count ... 
    fi 
done 

echo "Files: $files" 
echo "Directories: $dirs" 
+0

Ах идеальный. Как я могу изменить это, например «Есть 214 - типы» – Teddy13

+0

Могу ли я поместить каждый результат строки в переменную? Спасибо будет принимать любой способ – Teddy13

+0

Включение их в переменные возможно, но сложнее. Если вы хотите получить результат, вам будет лучше, если вы запустите цикл for, я обновлю свой ответ. – FatalError

4

Как об использовании find и wc:

# Find all files in the current directory 
$ find . -maxdepth 1 -type f | wc -l 

# Find all directories in the current directory 
$ find . -maxdepth 1 -type d | wc -l 

Команда wc(количество слов) может быть использована для подсчета количества символов, слов и строк. Здесь wc -l подсчитывает количество строк, выводимых из результатов find.

0

Конвейеризация команды в более будет держать его от прокрутки с экрана.

ls -l | cut -c1-1 | more 
Смежные вопросы