Я хочу создать список всех файлов в каталоге, не перечисляя ни один из подкаталогов, которые находятся в этом же каталоге, и распечатать этот список в новый файл.
ls -d * > filelist
создаст список всех файлов в текущем каталоге, но он также перечислит подкаталоги в текущем каталоге. Я попробовал find
команду, используя -maxdepth 1
опцию - однако, формат вывода является проблемой, так как find также выводит путь вместе с именами файлов.
Если кто-нибудь может подсказать мне, возможно, другую команду или опции, которые будут использоваться для вывода списка только файлов в каталоге, а не имен подкаталогов или их содержимого, я был бы признателен.
ls -d *
только в списке файлов и папок в текущей папке, исключая скрытые файлы / папки здесь;Ответы:
Решение на основе поиска:
Решение на основе Bash:
Решение на основе bash даст вам все, что не является каталогом; это будет включать в себя такие вещи, как именованные каналы (вы, вероятно, хотите это). Если вам нужны только файлы , используйте
find
команду или один из них:Если вы собираетесь использовать это регулярно, вы, конечно, можете поместить это в псевдоним где-то в вашем
~/.bashrc
:Поскольку вы отметили в комментариях, что на самом деле вы используете OSX, а не Ubuntu, я бы посоветовал вам в следующий раз направлять вопросы на Apple или на более общие сайты Unix & Linux Stack Exchange.
источник
Список только имен файлов:
Список только каталогов:
grep -v -e ^ $ - удалить пустые строки из результата.
Более подробная информация :
флаг ls -p должен ставить '/' в конце имени каталога, флаг -R - для рекурсивного поиска, -l - для вывода информации, -a - для вывода всего (включая скрытые файлы) с информацией, grep -v флаг для инверсии результатов и -e флаг для сопоставления регулярных выражений.
источник
Для просмотра только обычных файлов:
С символическими ссылками включены:
Где первый символ списка описывает тип файла, это
-
означает, что это обычный файл, для символической ссылки естьl
.Debian / Ubuntu
Напечатайте имена всех подходящих файлов (включая ссылки):
С абсолютными путями:
Напечатайте имена всех файлов,
/etc
которые начинаются сp
и заканчиваются наd
:источник
Еще одно решение, наивно короткое, которое сработало для меня:
источник
ls -alR |grep -E '^-'
Я бы предложил использовать find и просто удалить имя каталога из вывода:
источник
-maxdepth 1
должна перед любыми фильтрами, и вы можете достичь этого результата без использованияsed
с-printf
опцией, то есть:find . -maxdepth 1 -type f -printf '%f\n'
(это будет более эффективным , чем при использовании дополнительной программы).Другой возможный вариант
В
--file-type
Ставит / в конце папки (но и @ в конце символических ссылок.The grep -v '/'
Удаляет подкаталоги (потому что они теперь заканчиваются символом «/»). Вsed s/@$//
убирает , что @. -1 печатает один файл в каждой строке так что grep -v будет работать правильно.источник
-1
не имеет значения, чтобы grep вам это не нужно; если вы хотите-a
ls
ls -F | grep -v '/' | sed s/[@*]$// > filelist