Как перечислить только файлы, а не каталоги директории Bash?
Как я могу перечислить все файлы одной папки, но не их папки или подфайлы. Другими словами: Как я могу перечислить только файлы?
Ответы
Ответ 1
Использование find
:
find . -maxdepth 1 -type f
Использование опции -maxdepth 1
гарантирует, что вы будете смотреть только в текущем каталоге (или, если вы замените .
на некоторый путь, этот каталог). Если вам нужен полный рекурсивный список всех файлов в этом и подкаталогах, просто удалите эту опцию.
Ответ 2
-
carlpett find
-based ответ (find. -maxdepth 1 -type f
) в принципе работает, но не совсем то же самое, что и использование ls
: вы получаете потенциально несортированный список имен файлов с префиксом ./
и теряете способность применять ls
много вариантов;
Кроме того, find
всегда находит скрытые элементы, а поведение ls
зависит от наличия или отсутствия -a
или -a
.
-
Улучшение, предложенное Алексом Холлом в комментарии к вопросу, состоит в том, чтобы объединить глобализацию оболочки с find
:
find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
- Однако, в то время как это решает проблему префикса и дает в алфавитном порядке отсортирован, вы по- прежнему не имеют ни (встроенный) контроль над включением скрытых элементов, ни доступа к
ls
много других вариантов сортировки/вывода формата.
-
Hans Roggeman ls
+ grep
ответ прагматичен, но он блокирует использование длинного (-l
) формата вывода.
Чтобы устранить эти ограничения, я написал fls
(f iltering ls),
- утилита, которая обеспечивает гибкость вывода
ls
а также возможность фильтрации типов, - просто поместив символы фильтрации типов, такие как
f
для файлов, d
для каталогов и l
для символических ссылок перед списком аргументов ls
(для получения дополнительной информации запустите fls --help
или fls --man
).
Примеры:
fls f # list all files in current dir.
fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first
fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
Монтаж
Поддерживаемые платформы
- При установке из реестра npm: Linux и macOS
- При установке вручную: любая платформа Unix -l ike с Bash
Примечание: даже если вы не используете Node.js, его менеджер пакетов, npm
, работает на разных платформах и прост в установке;пытаться
curl -l https://git.io/n-install | bash
С установленным Node.js установите следующим образом:
[sudo] npm install fls -g
Примечание:
-
Требуется ли вам sudo
зависит от того, как вы установили Node.js/io.js и изменили ли вы разрешения позже; если вы получили ошибку EACCES
, попробуйте еще раз с sudo
.
-
-g
обеспечивает глобальную установку и необходим для установки fls
в вашей системе $PATH
.
Ручная установка
- Загрузите этот
bash
скрипт как fls
. - Сделайте его исполняемым с помощью
chmod +x fls
. - Переместите его или создайте символическую ссылку на папку в вашем
$PATH
, например, /usr/local/bin
(macOS) или /usr/bin
(Linux).
Ответ 3
ls -p | grep -v /
ls -p позволяет вам показывать/после имени папки, которая действует как тег для удаления.
Ответ 4
Вы также можете использовать ls
с grep
или egrep
и поместить его в свой профиль как псевдоним:
ls -l | egrep -v '^d'
ls -l | grep -v '^d'
Ответ 5
Я использую этот синтаксис:
find -maxdepth 1 -type f | ls
поэтому я могу перечислить только файлы в текущем каталоге и дать этому ls хороший дисплей.
Ответ 6
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
добавлен xargs
, чтобы он работал, и использовал -1
вместо -l
, чтобы показывать только имена файлов без дополнительной ls
info
Ответ 7
С regex:
ls -al | egrep -v "^ d. *"
Ответ 8
Просто добавив к carlpett ответ.
Для много полезного представления файлов вы можете передать вывод в ls.
find . -maxdepth 1 -type f|ls -lt|less
Показывает самые последние измененные файлы в формате списка, очень полезно, когда вы загрузили много файлов, и хотите увидеть не загроможденную версию последних.
Ответ 9
"find '-maxdepth" не работает с моей старой версией bash, поэтому я использую:
для f в $(ls); do, если [-f $f]; затем echo $f; fi; сделано