Как я могу перечислить все файлы одной папки, но не их папки или подфайлы. Другими словами: Как я могу перечислить только файлы?
Как перечислить только файлы, а не каталоги директории 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
Из реестра npm
Примечание: даже если вы не используете 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; сделано