Как я могу перечислить все файлы одной папки, но не их папки или субфайлы. Другими словами: как я могу перечислить только файлы?
bash
file-listing
Родриго
источник
источник
Ответы:
Использование
find
:find . -maxdepth 1 -type f
Использование этой
-maxdepth 1
опции гарантирует, что вы будете просматривать только текущий каталог (или, если вы замените.
какой-либо путь, этот каталог). Если вам нужен полный рекурсивный список всех файлов в этом и подкаталогах, просто удалите эту опцию.источник
find
на mac нет ни-type
, ни-maxdepth
опций.-type
и-maxdepth
не являются вариантами в обычном смысле слова; BSDfind
(как используется в OS X) называет их первичными , и они должны идти после операнда (ов) имени файла (.
в этом случае; обратите внимание, что, в отличие от Linux, версия BSD требует по крайней мере одного явного операнда имени файла); команда в этом ответе определенно работает на Mac.find *.png -maxdepth 0 -type f
избегать./
префикса в именах выходных файлов; также обратите внимание на-maxdepth
of0
, а не1
), пока все, что вам нужно, это имена файлов в алфавитном порядке . Если вы хотите, что вls
противном случае может сделать для вас (другой формат вывода / порядок, встроенный контроль над включением скрытых элементов или нет), дополненный фильтрацией [multi-] типов, сценарий из моего ответа может помочь.find * -maxdepth 0 -type f
(альтернатива, полученная из комментария @ AlexHall) сfind . -maxdepth 1 -type f
ответом:find . ...
неизменно включает скрытые элементы, неизменно добавляет префиксы к именам выходных файлов с помощью./
, а с GNUfind
(Linux) обычно выводит несортированный список.find * ...
, из-за того, что оболочка позволяет оболочке выполнять подстановку вперед, по умолчанию исключает скрытые элементы (можно изменить с помощьюshopt -s dotglob
), выводит простые имена файлов (без префикса), отсортированные по алфавиту. Ни один из подходов не включает символические ссылки на файлы; используйте опцию-L
для этого.ls -p позволяет вам отображать / после имени папки, которое действует как тег, который вы должны удалить.
источник
ls
в дополнение кfind
, поскольку последний возвращает относительные пути, а первый - только имена файлов. Используйте подходящий инструмент для работы.Функция
find
answer (find . -maxdepth 1 -type f
) на основе carlpett работает в принципе, но не совсем то же самое, что и usingls
: вы получаете потенциально несортированный список имен файлов, все с префиксом./
, и вы теряете возможность применитьls
многие параметры ;также
find
всегда находит скрытые элементы , тогда какls
поведение 'зависит от наличия или отсутствия опций-a
или-A
.Улучшение , предложил Алекс Холл в комментариях по этому вопросу, чтобы объединить оболочки подстановки с
find
:find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
многим другим параметрам сортировки / формата вывода.Ответ Ханса Роггемана
ls
+grep
прагматичен, но не позволяет использовать-l
выходной формат long ( ) .Для устранения этих недостатков я написал
fls
( е 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
Примечание. Даже если вы не используете Node.js, его менеджер пакетов
npm
, работает на разных платформах и прост в установке; пытатьсяcurl -L https://git.io/n-install | bash
После установки Node.js установите его следующим образом:
Примечание :
Необходимость
sudo
зависит от того, как вы установили Node.js / io.js и изменили ли вы разрешения позже ; если вы получите сообщениеEACCES
об ошибке, попробуйте еще раз сsudo
.-g
Обеспечивает глобальную установку и необходимо поставитьfls
в вашей системе$PATH
.Ручная установка
bash
сценарий какfls
.chmod +x fls
.$PATH
, например/usr/local/bin
(macOS) или/usr/bin
(Linux).источник
-1
(номер один);ls
фактически по умолчанию используется "голый" вывод, то есть только имена файлов, но при выводе на терминал используется макет на основе столбцов (несколько имен файлов в строке). Чтобы получить одно имя файла для каждой строки вывода (что иdir /b
имеет значение, если память обслуживает), используйте-1
параметр, который фактически неявно включен, когда stdout не подключен к терминалу, например, при отправке в канал или выходной файл.Вывод содержимого некоторого каталога без подкаталогов
Мне нравится использовать
ls
опции, например:Когда-то
--color
и все остальные. (См.ls --help
)Список всего, кроме папок
Это покажет файлы, символические ссылки, устройства, каналы, сокеты и т. Д.
так
find /some/path -maxdepth 1 ! -type d
можно легко отсортировать по дате:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
Только файлы листинга :
или же
find /some/path -maxdepth 1 -type f
отсортировано по размеру:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
Запретить перечисление скрытых записей :
Чтобы не отображать скрытые записи, где имя начинается с точки, вы можете добавить
! -name '.*'
:find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
потом
Вы могли бы заменить
/some/path
на.
в список для текущего каталога или..
для родительского каталога .источник
Вы также можете использовать
ls
сgrep
илиegrep
и поместить его в свой профиль в качестве псевдонима:ls -l | egrep -v '^d' ls -l | grep -v '^d'
источник
найти файлы: ls -l / home | grep "^ -" | тр-с '' | вырезать -d '' -f 9
найти каталоги: ls -l / home | grep "^ d" | тр-с '' | вырезать -d '' -f 9
найти ссылки: ls -l / home | grep "^ l" | тр-с '' | вырезать -d '' -f 9
tr -s '' превращает вывод в файл с разделителями-пробелами, команда cut говорит, что разделитель является пробелом, и возвращает 9-е поле (всегда имя файла / имя каталога / имя ссылки).
Я постоянно этим пользуюсь!
источник
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
добавлен,
xargs
чтобы заставить его работать, и используется-1
вместо того,-l
чтобы показывать только имена файлов без дополнительнойls
информацииисточник
find -printf0 '...' | sort -z
Просто добавляю к ответу Карлпетта. Для более удобного просмотра файлов вы можете передать вывод в ls.
find . -maxdepth 1 -type f|ls -lt|less
Показывает последние измененные файлы в формате списка, что весьма полезно, если вы загрузили много файлов и хотите увидеть не загроможденную версию последних.
источник
ls
не читает стандартный ввод, поэтому передавать что-либо по конвейеру бесполезноls
. Вы пропустилиxargs
?find
команда в этом ответе полностью игнорируется ; общая команда является таким же , какls -lt | less
, который не выполняет не фильтрации типа.find
можно былоfind . -maxdepth 1 -type f -ls
. Она также , кажется, работает на Mac OS, хотя я считаю ,-maxdepth
и-ls
не правильно портативные варианты."find '-maxdepth'" не работает с моей старой версией bash, поэтому я использую:
для f в $ (ls); делать, если [-f $ f]; затем echo $ f; fi; сделанный
источник
for f in $(ls)
вдвойне неверно. Вы можете исправить это,for f in *
но тогда он сломается, потому что выecho
неправильно цитируете аргумент .