Partial listing in linux

Listing only directories in UNIX

I want to list only the directories in specified path ( ls doesn’t have such option). Also, can this be done with a single line command?

For the future: Maybe unix/linux basics type of questions not so hard related to programming are better keept there: unix.stackexchange.com

23 Answers 23

Try this ls -d */ to list directories within the current directory

I don’t have a proper explanation, however I do know that the */ forces the display of only items ending with a forward slash, which in this case would be a directory, even if the -F option of ls isn’t used. Similar to the behaviour of ls *php and how it displays all files ending with php in a directory.

To me this looks to be the way it should be done. Unlike the suggested ls solutions, find is solely responsible for doing the job (not relying on shell wildcard expansion, which can impose limits). It also is a lot more concise.

The bad thing about this is that it doesn’t work if you are trying to loop through the results and your results have spaces in the names.

This is really slow, at least on my Mac. It seems to do the full recursive search that find usually does but only output the folders at depth 1.

basically filters the expansion of ‘*’, i.e. all entries in the current dir, by the -type d condition.

Advantage is that, output is same as ls -1 * , but only with directories and entries do not start with a dot

You can use ls -d */ or tree -d

Another solution would be globbing but this depends on the shell you are using and if globbing for directories is supported.

Downvotes as I believe the tree command is not a native unix command (please correct me if I’m wrong).

Since there are dozens of ways to do it, here is another one:

  • -d: directories
  • -L: depth of the tree (hence 1, our working directory)
  • -i: no indentation, print names only
  • —noreport: do not report information at the end of the tree listing

And thank you for explaining the switches. Stack Overflow is about answers, I always appreciate when people do just like you with an explanation vs. «just read the man entry!»

This is the highest-ranked solution that lists soft-linked directories and does so in a useful manner, exposing them as a link. I prefer the variation: tree -C -d -L 1 -i —noreport | tail -n+2

You can make an alias and put it into the profile file

links are not viewed with this command. And a link can be a file or a directory. Example : lrwxrwxrwx 1 root root 21 avril 15 17:38 cron -> /lib/init/upstart-job.

find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::' 

use this to get a list of directory

Читайте также:  Linux remove file by name

The answer will depend on your shell.

In zsh , for example, you can do the following:

And all directories within the current working directory will be displayed.

See man zshexpn for more information.

An alternative approach would be to use find(1) , which should work on most Unix flavours:

find . -maxdepth 1 -type d -print 

find(1) has many uses, so I’d definitely recommend man find .

In order to list the directories in current working directory ls -d */ can be used. And If you need to list the hidden directories use this command ls -d .*/

find specifiedpath -type d

If you don’t want to recurse in subdirectories, you can do this instead:

find specifiedpath -type d -mindepth 1 -maxdepth 1

Note that «dot» directories (whose name start with . ) will be listed too; but not the special directories . nor .. . If you don’t want «dot» directories, you can just grep them out:

find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v ‘^\.’

Long listing of directories

You can use the tree command with its d switch to accomplish this.

% tree -d tstdir tstdir |-- d1 | `-- d11 | `-- d111 `-- d2 `-- d21 `-- d211 6 directories 

see man tree for more info.

I didn’t downvote, just had the same question. It appears your answer is a dupe of echox’s, maybe that’s why?.

@Louis — thanks I never even noticed his mention of tree . Oh well, wasn’t my intent to steal anyone’s thunder.

If I have this directory:

lrwxrwxrwx 1 nagios nagios 11 août 2 18:46 conf_nagios -> /etc/icinga -rw------- 1 nagios nagios 724930 août 15 21:00 dead.letter -rw-r--r-- 1 nagios nagios 12312 août 23 00:13 icinga.log -rw-r--r-- 1 nagios nagios 8323 août 23 00:12 icinga.log.gz drwxr-xr-x 2 nagios nagios 4096 août 23 16:36 tmp 

To get all directories, use -L to resolve links:

drwxr-xr-x 5 nagios nagios 4096 août 15 21:22 conf_nagios drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp 
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp 

conf_nagios directory is missing.

### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*): find $(pwd) -maxdepth 1 -type d -name "SL*" 

Will list all directories

will list all directories in long form

will list all directories, including hidden directories, in long form.

I have recently switched to zsh (MacOS Catalina), and found that:

no longer works if the current directory contains no hidden directories.

It will print the above error, but also will fail to print any directories.

Also fails in the same way.

So far I have found that this:

is a decent workaround. The ; is a command separator. But it means that if there are no hidden directories, it will list directories, and still print the error for no hidden directories:

foo bar zsh: no matches found: .*/ 

ls is the shell command for list contents of current directory
-l is the flag to specify that you want to list in Longford (one item per line + a bunch of other cool information)
-d is the flag to list all directories «as files» and not recursively
*/ is the argument ‘list all files ending in a slash’
* is a simple regex command for «anything», so */ is asking the shell to list «anything ending in ‘/'»

Читайте также:  Kde plasma desktop linux

See man ls for more information.

in my .zshrc, and it seems to work fine.

NOTE: I’ve also discovered that

doesn’t work, as it still prints sterr to the terminal. I’ll update my answer if/when I find a solution.

Источник

Как вы перечисляете только файлы, а не каталоги в Linux? — Подсказка по Linux

У вас должны быть предварительные знания о том, как составить список всех каталогов и папок, находящихся в системах Linux. Вы могли использовать для этого команду «ls» при работе с любым дистрибутивом операционной системы Linux. В этом руководстве мы рассмотрим процесс вывода списка файлов только из определенного каталога или папки в системе Linux. Если вы хотите узнать о листинге файлов, пройдите каждый шаг этого руководства.

Пример команды «ls»:

Прежде всего, для тех, кто не знаком с командой «ls» для вывода списка файлов и папок, вот простая иллюстрация. Откройте оболочку командной строки и введите команду «ls», чтобы вывести список только каталогов. На выходе будут показаны только каталоги, но не файлы.

Чтобы показать список всех файлов и папок в системе Linux, попробуйте команду «ls» с флагом «-a», как показано ниже. Он покажет все скрытые и основные файлы и папки.

Список файлов с помощью команды «Grep»:

Сначала мы воспользуемся командой grep в команде «ls» list, чтобы вывести список всех файлов, находящихся в конкретной папке. Попробуйте следующую команду «ls» вместе с флагом «-la», чтобы вывести список всех обычных файлов, например, скрытых или нет. Выражение «^ -» использовалось для поиска обычных файлов. Вы увидите список обычных файлов, созданных в домашнем каталоге пользователя «aqsayasin».

Вместо того, чтобы перечислять только обычные файлы, вы также можете перечислить другие типы файлов, используя команду «grep» и «ls» с небольшими изменениями. Измените символические символы, чтобы отобразить все другие типы файлов, как показано ниже. Поскольку у нас пока нет других типов файлов, отображаются только обычные файлы.

Вы также можете использовать приведенную ниже команду «ls», чтобы вывести список файлов в текущем местоположении.

Список файлов с помощью команды «Run-parts Regex»:

Команда run-parts в основном используется в системах Debian и Ubuntu. Эта команда печатает все совпадающие имена файлов, если они указаны. Итак, в первую очередь мы будем использовать эту команду, не указывая абсолютный путь, как показано ниже. И вывод показывает имена файлов, находящихся в домашнем каталоге системы Linux.

Опять же, используя приведенную выше команду с небольшими изменениями, она покажет абсолютный путь вместе с именами файлов, используя абсолютный путь в командах, показанных ниже. На выходе отображаются имена файлов и их расположение.

Читайте также:  Astra linux smolensk репозитории debian

Список файлов с помощью команды «найти»:

Еще один новый метод вывода списка файлов в терминале — использование команды «найти». Наш первый метод будет использовать ключевое слово «find» вместе с ключевым словом «maxdepth flag» в команде. Ключевое слово «-maxdepth» вместе с числом «1» означает, что мы будем искать файлы только в текущем каталоге. Точку можно заменить на путь для проверки файлов в этом каталоге. Ключевое слово «f» определяет тип файла. Вывод показывает имена файлов.

$ найти . -Максимальная глубина 1 – тип ж

Давайте заменим точку на путь к каталогу, чтобы найти файлы в папке «Документы». Теперь мы будем использовать ту же команду с небольшими изменениями. Мы будем использовать в нем флаг типа «d» для извлечения всех типов файлов, кроме каталогов. Восклицательный знак используется для типа каталогов «не». Выполните приведенную ниже команду в оболочке терминала, чтобы вывести список файлов вместе с их путями.

$ найти / дом / Аксаясин / Документы / -Максимальная глубина 1 ! – тип d

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

$ найти / дом / Аксаясин / Документы / -Максимальная глубина 1 – тип ж

Другой способ перечисления файлов — использование флага «-ls» вместе с той же старой командой. На этот раз команда «-ls» использовалась для вывода списка всех привилегий и дополнительной информации о файлах вместе с их именами. Выполнив приведенную ниже команду, вы получите список файлов вместе с информацией об их владельцах, группах, дате их создания и многом другом.

$ найти. -Максимальная глубина 1 ! – тип d -ls

Команда «найти» нашла в себе множество вариаций. Мы можем использовать «find» разными способами только для вывода списка файлов. На этот раз мы будем использовать его для составления списка файлов в соответствии с порядком сортировки по дате их создания. Для этой цели мы будем использовать «-hltrF» вместе с флагом «-exec» в этой команде, как показано ниже:

$ найти / дом / Аксаясин / Документы / -Максимальная глубина 1 ! – тип d — exec ls –HltrF < >+

Вы можете увидеть список файлов, находящихся в каталоге «Документы», в соответствии с порядком сортировки по дате их создания.

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

$ найти / дом / Аксаясин / Документы / -Максимальная глубина 1 – тип е — exec ls –Lsf — цвет < >+

Если вы не хотите отображать скрытые файлы, вы можете сделать это с помощью следующей команды.

$ найти / дом / Аксаясин / Документы / -Максимальная глубина 1 ! – тип d ! название ‘. * ’ -exec ls –HltrF < >+

Вывод:

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

Источник

Оцените статью
Adblock
detector