отображать только файлы, начинающиеся с. (Скрытый)


11

Я пытался отобразить только скрытые файлы, но не знаю, как это сделать.

Это работает (но сопоставление также точек в других местах)

ls -la | grep '\.'

Пытался добавить, ^но не нашел решения.


1
Разбор lsникогда не был прекрасной идеей, но то, что вы попробовали, сработало бы, если бы вы использовали якорь ^для обозначения начала матча. ls -la | grep '^\.'
devnull

3
Нет, это не так, имя файла не является началом строки с флагом -l. ls -la | awk '$9 ~ /^\./'воля.
yoonix

Ответы:



4
find . -type f -name '\.*' -print 

Должно работать, если вы хотите перечислить каждый скрытый файл в иерархии каталогов.


2

Если вы хотите проанализировать lsвывод, вы должны добавить ^в начале регулярное выражение и не использовать -lопцию. Использование -lприводит к тому, что вывод каждой строки начинается с информации о правах доступа к файлу или папке, а не имени файла или папки. Так что вы должны использовать так:

ls -Ad | grep '^\.'

Или вы можете сделать с помощью printfвстроенного Bash:

printf "%s\n" .*

Если вы используете zsh, вы можете использовать:

print -l .*

1

Вот два других способа найти только скрытые файлы.

find . -maxdepth 1 -name ".*" -type f -ls

или

find . -maxdepth 1 -name ".*" -type f -printf "%P \n"

Используйте, -maxdepthчтобы указать, как далеко вы хотите искать в дереве каталогов.


1

Улучшение ответа Flup :

ls -lad .[!.]* ..?*

В этом списке будут перечислены все файлы, имена которых начинаются с точки и которые не являются .ни ...

Обратите внимание, что если вы хотите передать вывод команды lsto grep(что, как указывает devnull , никогда не бывает хорошей идеей), убедитесь, что вы используете \lsили command lsпотому что if lsимеет псевдоним, чтобы показать вам цветной вывод (как, например, в Debian) , его вывод содержит escape-последовательности ANSI для создания цветного вывода, которое сработает, grepесли его шаблон закреплен в начале строки.


1
Вы можете использовать -A(вместо -a) , чтобы игнорировать ., ...
OJFord

@ OJFord + -Aотличается от -aдля каталогов, lsв которые попадают, но оба (в равной степени) игнорируются и бесполезны для имен, указанных в командной строке с -dдействующими. Кроме того, если lsесть псевдоним, --color=auto то все в порядке; только --color=alwaysили --colorвызывает проблемы.
dave_thompson_085

0

Решение val0x00ff действительно хорошо, но оно забывает скрытые каталоги.

Если вы хотите скрытые файлы и скрытые каталоги , без. и .. :

find -maxdepth 1 -regex '\./\..+' -printf "%P\n"

Ваше предложение не работает в VMware ESXi (не указывать ни файлов, ни каталогов), и в Linux тоже происходит сбой (с maxdepth> 1, в нем также перечислены все файлы в каталоге, начинающемся с.), Но это работает как в Linux, так и в ESXi: find . \( -type f -o -type d \) -name '\.*' -print; применять в maxdepthслучае необходимости.
Йерун Виерт Плюмерс

0

Ниже один очень компактный и поддерживает много вариантов

1) Отображение скрытых файлов, каталогов и подкаталогов

find . | grep "^\./\."

2) Отображать только скрытые каталоги и подкаталоги

find . -type d | grep "^\./\."

3) Отображать скрытые файлы только в текущих и подкаталогах

find . -type f | grep "^\./\."

4) Показать скрытые файлы и каталоги в текущей папке

find . -maxdepth 1 | grep "^\./\."


0

Ты можешь попробовать:

find . -maxdepth 1 -type f -name '\.*' -print
find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -print

Конечно, вы можете использовать разные maxdepthзначения или удалить его полностью. Очень полезно, если вы хотите исследовать каталоги ( -type d) или обычные файлы ( type f) или оба, и комбинировать с другими функциями, такими как:

(например, время последнего изменения, основанное на примере @piroux - дополнено @ jeroen-wiert-pluimers )

find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -exec stat -c %y {} \; -printf "%P\t"

-1

Ты можешь попробовать :

ls -a |grep -E  "^\."

^ указывает, что это начало контента с регулярным выражением


1
Дубликат другого ответа от 3 лет назад ...
Джефф Шаллер

Я видел предыдущий ответ, он не повторяется, и определенно "ls -a" и "ls -Ad" не имеют одинакового значения. «-a» означает, что список всех файлов, включая каталоги, начинается с «.» -А означает список всего, кроме "." , ".." и содержимое каталога.
Линцзин Франция
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.