перечисление файлов в каталоге без перечисления подкаталогов и их содержимого в этом каталоге

Я хочу создать список всех файлов в каталоге, не перечисляя ни один из подкаталогов, которые находятся в этом же каталоге, и распечатать этот список в новый файл.

ls -d * > filelist

создаст список всех файлов в текущем каталоге, но также перечислит подкаталоги в текущем каталоге. Я попробовал команду find, используя опцию -maxdepth 1 - однако формат вывода является проблемой, так как find также выводит путь вместе с именами файлов.

Если кто-нибудь может сказать мне, возможно, другую команду или опции, которые будут использоваться для создания выходного списка только файлов в каталоге, а не имен подкаталогов или их содержимого, я был бы признателен.

24
задан 4 March 2015 в 21:20

6 ответов

Список только имен файлов:

 1. ls -p | grep -v /                                   (without hidden files)
 2. ls -l | grep ^- | tr -s ' ' | cut -d ' ' -f 9       (without hidden files)

 a) ls -pa | grep -v /                                  (with hidden files)
 b) ls -la | grep ^- | tr -s ' ' | cut -d ' ' -f        (with hidden files)

Список только каталогов:

 1. ls -p | grep /                                      (without hidden)
 2. ls -l | grep ^d | tr -s ' ' | cut -d ' ' -f 9       (without hidden) 

 a) ls -pa | grep /                                     (with hidden)
 b) ls -l | grep ^d | tr -s ' ' | cut -d ' ' -f 9       (with hidden)

grep -v -e ^ $ is to удалить пустые строки из результата.

Подробнее :
Флаг ls -p должен ставить '/' в конце имени каталога, флаг -R - для рекурсивного поиска, -l - для вывода с информацией, -a для перечисления всех (включая скрытые файлы) с информацией, флаг grep -v предназначен для инверсии результатов, а флаг -e - для сопоставления с регулярным выражением.

0
ответ дан 4 March 2015 в 21:20

Для отображения только обычных файлов:

ls -al | grep ^-

С символьными ссылками:

ls -al | grep ^[-l]

Где первый символ списка описывает тип файла, поэтому - означает что это обычный файл, для символической ссылки l.

Debian / Ubuntu

Вывести имена всех подходящих файлов (включая ссылки):

run-parts --list --regex . .

С абсолютными путями:

run-parts --list --regex . $PWD

Распечатать имена всех файлов в /etc, которые начинаются с p и заканчиваются d:

run-parts --list --regex '^p.*d /etc
0
ответ дан 4 March 2015 в 21:20

Я бы предложил использовать find и просто удалить имя каталога из выходных данных, если это необходимо:

find . -type f -maxdepth 1 | sed s,^./,,
0
ответ дан 4 March 2015 в 21:20

Еще одно решение, наивно короткое, которое сработало для меня:

ls -la | grep -E '^[^d]' > files
0
ответ дан 4 March 2015 в 21:20
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

Другой возможный вариант -

ls -F | grep -v '/' | sed /[@*]$// > filelist

--file-type ставит / в конце папок (но также и @ в конце символических ссылок. The grep -v '/' удаляет подкаталоги (потому что теперь они заканчиваются на '/'). sed s/@$// удаляет это @. -1 печатает один файл на строку, чтобы grep -v работал правильно.

0
ответ дан 4 March 2015 в 21:20

Решение на основе поиска:

find . -maxdepth 1 -type f -printf '%f\n'

Решение на основе Bash:

for f in *; do [[ -d "$f" ]] || echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done

Решение на основе Bash предоставит вам все, что не является каталогом; это будет включать в себя такие вещи, как именованные каналы (вы, вероятно, хотите это). Если вы хотите, чтобы были только файлы , либо используйте команду find, либо одну из них:

for f in *; do [[ -f "$f" ]] && echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done

Если вы собираетесь использовать это регулярно, вы, конечно, можете поместить это псевдоним где-то в вашем ~/.bashrc:

alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'

Так как вы отметили в комментариях, что вы на самом деле используете OSX, а не Ubuntu, я бы посоветовал вам в следующий раз направлять вопросы на ] Apple или более общий Unix & amp; Linux Stack Exchange сайтов.

0
ответ дан 4 March 2015 в 21:20

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

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