и это все еще оставляет вас с префиксом «./» к каждому имени файла. Это на самом деле не проблема, но я думаю, что это некрасиво. Я пошел с:
ls -p | grep -v '/$'
И это даст вам список, который выглядит так же, и вы также можете добавить дополнительные lsаргументы. Добавьте, --color=alwaysи вы получите свои dircolors обратно, или -aчтобы увидеть скрытые файлы.
Мне нравится ответ Александра, потому что он на самом деле зависит от характеристики файловой системы рассматриваемого файла, поэтому его никогда не одурачат. Мой ответ будет введен в заблуждение файлом, в котором последним символом его имени будет символ '/'. Но похоже, что это вызывает проблемы.
'-not' относится к GNU find, так как он не совместим с POSIX, лучше не учить этим параметрам, поскольку пользователь может иметь "плохие" привычки и чувствовать себя потерянным в других UNIX-
Этот ответ уже был предоставлен за год до того, как застрял (создавая визуальный шум).
Алекс Роше
2
Приведенные выше решения «найти» теряют некоторые возможности ls, например: выводить список только файлов, отсортированных по убыванию времени модификации.
Ответы "ls -p | grep" не относятся к другим элементам ls, таким как -R, если они желательны
Следующий ответ, хотя и более многословный, на мой взгляд, отражает истинное поведение ls и большую гибкость при выборе «только файлы»
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Просто замените переключатели ls по желанию, и результат будет возвращен только с файлами. Если также требуются ссылки и другие элементы, необходимо провести небольшую переработку теста на включение.
При этом вы все равно можете использовать любые другие варианты, которые lsобычно принимает. Или ... удалить -vв список только каталоги. Или ... замените каталог любым другим типом файлов, который fileпонимает и сообщает, например, ASCII, empty, ELF и так далее.
Это не работает, если любое из имен файлов, которые будут перечислены, содержит пробелы.
Психонавт
ls -t .|while read f;do [ -f "$f" ]&& echo $f;doneпримерно в 3 раза быстрее в моих тестах
Алекс Роше
0
Я был в системе, где findдвоичный файл не поддерживал, -notи я в конечном итоге использовал:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Преимущества: не полагается ни на что, кроме как sh ls echo
совместимо с bash и dash.
Может быть изменено для соответствия другим вещам (например, каталогам) путем изменения. -f
Быстрее, чем некоторые ответы, и использует меньше оперативной памяти и ЦП.
ls .
без каталогов - и вот оно.-ls
или-exec ls -l {} \;
сделало бы это какls -l
без каталогов.Чтобы получить его в точности эквивалентно
ls .
вам нужно не показывать скрытые каталоги.find . -maxdepth 1 -not -type d -and -not -name '.*'
и это все еще оставляет вас с префиксом «./» к каждому имени файла. Это на самом деле не проблема, но я думаю, что это некрасиво. Я пошел с:
ls -p | grep -v '/$'
И это даст вам список, который выглядит так же, и вы также можете добавить дополнительные
ls
аргументы. Добавьте,--color=always
и вы получите свои dircolors обратно, или-a
чтобы увидеть скрытые файлы.Мне нравится ответ Александра, потому что он на самом деле зависит от характеристики файловой системы рассматриваемого файла, поэтому его никогда не одурачат. Мой ответ будет введен в заблуждение файлом, в котором последним символом его имени будет символ '/'. Но похоже, что это вызывает проблемы.
источник
попробуй это:
или это:
источник
Хотя это старый пост, но я подумал, что это может помочь ..
$ ls -l | grep -v ^ d
В нем будут перечислены все файлы, включая символические ссылки, файлы символов и блоков.
источник
Приведенные выше решения «найти» теряют некоторые возможности ls, например: выводить список только файлов, отсортированных по убыванию времени модификации.
Ответы "ls -p | grep" не относятся к другим элементам ls, таким как -R, если они желательны
Следующий ответ, хотя и более многословный, на мой взгляд, отражает истинное поведение ls и большую гибкость при выборе «только файлы»
Просто замените переключатели ls по желанию, и результат будет возвращен только с файлами. Если также требуются ссылки и другие элементы, необходимо провести небольшую переработку теста на включение.
источник
При этом вы все равно можете использовать любые другие варианты, которые
ls
обычно принимает. Или ... удалить-v
в список только каталоги. Или ... замените каталог любым другим типом файлов, которыйfile
понимает и сообщает, например, ASCII, empty, ELF и так далее.источник
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
примерно в 3 раза быстрее в моих тестахЯ был в системе, где
find
двоичный файл не поддерживал,-not
и я в конечном итоге использовал:Преимущества: не полагается ни на что, кроме как
sh ls echo
совместимо с bash и dash.
Может быть изменено для соответствия другим вещам (например, каталогам) путем изменения.
-f
Быстрее, чем некоторые ответы, и использует меньше оперативной памяти и ЦП.
источник