Как показывать только скрытые файлы в терминале?

У меня есть каталог, содержащий тысячи файлов, некоторые из них скрыты.

Команда ls -a перечислите все файлы, включая скрытые, но мне нужно просто перечислить скрытые файлы.

Какую команду я должен использовать?

Команда :

ls -ld .?* 

Будет отображаться только список скрытых файлов.

Объяснять :

 -l     use a long listing format -d, --directory              list  directory entries instead of contents, and do not derefer‐              ence symbolic links.?* will only state hidden files 
ls -d .!(|.)

Делает именно то, что ищет OP .

ls -ad .*

работает у меня в Баш.

Если вам просто нужны файлы в вашем текущем каталоге (без рекурсии), вы могли бы сделать

echo .[^.]*

Это выведет имена всех файлов, имя которых начинается с . и сопровождается одним или несколькими символами без точки. Обратите внимание, что это приведет к сбою для файлов, имя которых начинается с последовательных точек, так, например ....foo не будет показано.

Вы также могли бы использовать find:

find -mindepth 1 -prune -name '.*'

То -mindepth гарантирует, что мы не совпадем . и -prune означает, что find не будет переходить в подкаталоги.

find обычно это лучший вариант для сложных поисков, чем использование глобализации имен.

find . -mindepth 1 -maxdepth 1 -name '.*'

или

find . -mindepth 1 -maxdepth 1 -name '.*' -o -name '*~'

find . выполняет поиск по текущему каталогу

-mindepth 1 исключает . и.. из списка

-maxdepth 1 ограничивает поиск текущим каталогом

-name '.*' найдите имена файлов, начинающиеся с точки

-o или

-name '*~' найдите имена файлов, которые заканчиваются тильдой (обычно это резервные копии файлов из программ редактирования текста).

Однако в этом и во всех других ответах отсутствуют файлы, находящиеся в текущем каталоге .hidden файл. Если вы пишете сценарий, то эти строки будут читать .hidden файл и отобразите имена файлов тех, которые существуют.

if [[ -f .hidden]] # if '.hidden' exists and is a filethen    while read filename # read file name from line    do        if [[ -e "$filename" ]] # if the read file name exists        then            echo "$filename" # print it        fi    done < .hidden # read from .hidden filefi

С помощью find и awk,

find . -type f | awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

Объяснение:

find . -type f> -- Перечислите все файлы в текущем каталоге вместе с его путем, например,

./foo.html./bar.html./.foo1

awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

/ в качестве разделителя полей awk проверяет, помечено ли последнее поле точкой или нет. Если он начинается с точки, то выводится последнее поле соответствующей строки.

Подход 1: ls -d .{[!.],.?}*

Объясните: я хочу исключить . и .. но включить файл, такой как ..i_am_also_a_hidden_file.txt

  1. ls -d .* нежелательно показывает . и ..
  2. ls -d .?* (текущий принятый ответ) нежелательно показывает ..
  3. ls -d .[!.]* нежелательно не будет проявляться ..i_am_also_a_hidden_file.txt
  4. ls -d .{[!.],.?}* это и есть ответ

Подход 2: ls -A | grep "\\."

Лично мне этот способ нравится больше

Что еще ты мог бы сделать, is ls .?* Или ls .!(|) это покажет вам все, что находится в текущем каталоге, скрытые файлы / папки вверху и другие файлы / папки внизу

например: с моего терминала

$ ls .?*       .bash_history    .dmrc        .macromedia   .weather.bash_logout     .gksu.lock   .profile      .wgetrc.bash_profile    .bashrc.save .ICEauthority .toprc           .Xauthority.bashrc          .lastdir     .viminfo      .xsession-errors.bashrc~         .dircolors   .lynxrc       .vimrc           .xsession-errors.old..:Baron.adobe:Flash_Player.aptitude:cache  config.cache:compizconfig-1                              rhythmboxdconf                                       shotwell

Теперь обратите внимание, что в приведенных выше результатах он показывает вам каждый файл / каталог с его вложенным каталогом и любыми скрытыми файлами прямо под ним.

[1:0:248][ebaron@37signals:pts/4][~/Desktop]$ ls .!(|).bash_aliases  .bashrc1  .bashrc1~..:askapache-bash-profile.txt  examples.desktop             Public           top-1m.csvbackups             Firefox_wallpaper.png        PycharmProjects          top-1m.csv.zipDesktop             java_error_in_PYCHARM_17581.log  Shotwell Import Log.txt  topsites.txtDocuments           Music                Templates            VideosDownloads           Pictures                 texput.log           vmware

Извините, я не могу комментировать. чтобы объяснить здесь разницу между ls .?* и ответ @cioby23 ls -d .[!.]* .??* И почему он на самом деле печатает скрытые файлы дважды, потому что буквально вы спрашиваете дважды .??*, .?*, .[!.]* это одно и то же, поэтому добавление любого из них с разными символами команды приведет к печати дважды.

Я думаю, что вы можете сделать это с помощью следующей команды.

ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"

ls -a введенная вами команда, которая показывает все файлы и каталоги в текущем рабочем каталоге.

grep "^\." команда, которую я добавил, которая фильтрует вывод, чтобы показывать только скрытые файлы (ее имя начинается с ".").

grep -v "^\.$" | grep -v "^\..$" команда, которую я добавил, которая фильтрует вывод, чтобы исключить ., .. (они являются текущим и родительским каталогом).

Если некоторые имена файлов могут содержать больше строки с "\n", приведенный выше пример может быть неверным.

Поэтому я предлагаю следующую команду, чтобы решить эту проблему.

find -maxdepth 1 -name ".[!.]*"

Вы также можете использовать:

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

Это позволит вам отображать обычные скрытые файлы и скрытые файлы, которые начинаются, например, с 2 или 3 точек : ..hidden_file

Простое `ls -ld ." или "ls -ald ." будет работать