Як я можу виключити каталоги при переліку файлів у поточному каталозі?
ls .
^ буде включати в лістинг каталоги.
Як я можу виключити каталоги при переліку файлів у поточному каталозі?
ls .
^ буде включати в лістинг каталоги.
Відповіді:
Спробуйте це:
find . -maxdepth 1 -not -type d
ls .
без каталогів - і ось він.
-ls
або -exec ls -l {} \;
зробить це так, як ls -l
без каталогів.
Щоб отримати його рівнозначно, ls .
вам не потрібно показувати приховані бруди.
find . -maxdepth 1 -not -type d -and -not -name '.*'
і це все ще залишає вас з "./" префіксом до кожного імені файлу. Це насправді не проблема, але я думаю, що це якось потворно. Я пішов:
ls -p | grep -v '/$'
І це дозволить отримати список, який виглядає так само, і ви можете також додати додаткові ls
аргументи. Додайте а, --color=always
і ви отримаєте назад свої кольори або -a
побачите приховані файли.
Мені подобається відповідь Олександра, тому що він насправді залежить від файлової системи, характерної для відповідного файлу, тому його не обдурять ніколи. Мою відповідь буде обдурений файлом, який має "/" як останній символ у своєму імені. Але це здається, що це просить неприємностей.
спробуйте це:
$ знайти. -тип f-maxx 1
або це:
$ ls -p | egrep -v / $
$ ls -la | egrep -v ^ d
Хоча це старий пост, але я думав, що це може допомогти ..
$ ls -l | grep -v ^ d
У ньому будуть перераховані всі файли, включаючи символьні посилання, символьні та блокові файли.
Вищенаведені рішення "знайти" втрачають частину можливостей ls - наприклад: перераховують лише файли, відсортовані за зменшенням часу модифікації.
Відповіді "ls -p | grep" не елегантно стосуються інших елементів ls, таких як -R, якщо вони бажають
Наступний відповідь, в той час як більш багатослівним, на мій погляд , відображає справжню LŠ поведінку і максимальну гнучкість для «тільки файли» вибору
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Просто замініть перемикачі ls за бажанням, і результат буде повернутий лише файлами. Якщо також потрібні посилання та інші пункти, то для тесту для включення потрібно буде виконати незначну переробку.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
З цим ви все ще можете використовувати будь-які інші варіанти, ls
як правило. Або ... видалити, -v
щоб перелічити лише каталоги. Або ... замініть каталог будь-яким іншим типом файлів, який file
розуміє та звітує, як-от ASCII, порожній, ELF тощо.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
в моїх тестах приблизно в 3 рази швидше
Я був у системі, де find
двійковий файл не підтримував, -not
і я закінчив використовувати:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Переваги: не покладається ні на що, крім sh ls echo
сумісного з bash і dash.
Можна змінити, щоб відповідати іншим речам (наприклад, каталогів), змінивши -f
: швидше, ніж деякі відповіді, і використовує менше оперативної пам'яті та процесора