2013-09-17 2 views
0

Я пытаюсь написать команду UNIX, используя канал, который отобразит количество файлов в моем домашнем каталоге, включая скрытые файлы, которые начинаются с символа '.'Содержимое каталога каталога

До сих пор у меня есть:

Ls -a * |. wc -l Я получаю целое число

Правильно ли моя команда?

+0

Ваш код выглядит правильно, но вам не нужно '. *'.Если вы хотите также указать количество файлов в подкаталогах, используйте 'ls -Ra1 | wc -l' – smac89

+0

Другой плакат предложил использовать ls -1 | wc -1, однако это, я думаю, только частично правильно, поскольку опция «a» позволяет использовать все файлы и скрытые файлы. Поэтому я думаю, что ls -a | wc -l правильно? Правильно? – user2720163

+0

Yup ваш код делает именно то, что вам нужно для этого. Я просто предположил, что если вам нужно также подсчитывать файлы в подкаталогах, вы можете использовать опцию '-R' для чтения рекурсивно. – smac89

ответ

2

Находясь в текущем каталоге:

ls -1 | wc -l 

или указать полный путь:

ls -1 /path/to/dir | wc -l 

-ПРИМЕЧАНИЕ этого ключа для ls не l, это 1 - что будет пропускать 'скрытый' файлы (те, кто начинается с .). Если вы хотите, чтобы включить их, а затем:

ls -1a /path/to/dir | wc -l 

бут сведению, что . (текущий указатель каталога) и .. (родительский указатель каталога) будет включен, так что, вероятно, вы хотите, чтобы вычесть 2 из числа результатов ,

+0

Спасибо .. Я знал, что был близок, но при использовании ls -a. * Он возвратил слишком много результатов, что сделало меня подозрительным, поскольку это выглядело неправильно. – user2720163

+0

Я считаю, что единственной частью, которая не нужна, является «. *». Если я удалю это, я получаю - ls -a | wc-1. Верный? – user2720163

+0

'. *' Указывает, что вы хотите перечислить _all directories_ внутри текущего, и это не то, что вы хотите получить. Итак, используйте либо '.', либо полный путь –

1

Является ли моя команда правильной?

No. Сказав ls -a .*, команда также будет возвращать файлы внутри каталога, начиная с . в дополнение к возвращению . и ..

Для display the number of files in my home directory including hidden files that begin with a '.', скажем:

find $HOME -type f | wc -l 

Если вы хотите ограничить его только домашним каталогом, скажем:

find $HOME -maxdepth 1 -type f | wc -l 
1

Вы также можете использовать find:

find ~ -type f | wc -l 

или

find ~ -type f -maxdepth 1 | wc -l 

, если вы не хотите, чтобы найти рекурсивно.

0

YA не рекурсивная команда с большим количеством труб:

ls -la | awk '{ print $1 }' | grep -v total | grep -v d | wc -l 

Best не рекурсивный, - как коллеги выше, но, чтобы избежать предупреждений, пожалуйста, поставьте maxdepth до того варианта типа:

find ~ -maxdepth 1 -type f | wc -l 

Рекурсивного:

find ~ -type f | wc -l 
Смежные вопросы