Отображение скрытых файлов в Linux довольно просто. Вы используете команду ls следующим образом:
ls -a
Это нормально. Вы можете увидеть скрытые файлы, имена которых начинаются с точки (.).
Но вы видите все файлы в текущем каталоге, скрытые и обычные.
Что, если вы хотите видеть ТОЛЬКО скрытые файлы, а не обычные?
Нет готового к использованию варианта, как -a и -A. Тем не менее, вы всегда можете найти способ добиться чего-то, объединив несколько команд с помощью перенаправления конвейера.
Чтобы отобразить только скрытые файлы и каталоги, самый простой подход — отобразить скрытые файлы с помощью ls -a, а затем использовать grep для фильтрации только тех записей, которые начинаются с . (точка).
ls -a | grep "^\."
^ означает «начать с». Символ точки необходимо экранировать с помощью \, а поскольку вы использовали специальные символы, все заключено в двойные кавычки. С помощью «^\.» вы указываете команде grep отображать только результаты, начинающиеся с точки.
Позвольте нам поделиться примером. Вот содержимое нашего примера каталога:
andreyex@destroyer:~/toto$ ls -l total 352 -rw-rw-r-- 1 andreyex andreyex 45443 May 24 09:03 apt-get.pdf -rw-rw-r-- 1 andreyex andreyex 29983 May 27 16:07 bash.pdf -rw-rw-r-- 1 andreyex andreyex 249773 May 26 14:56 cronjob-cheatsheet.png -rw-rw-r-- 1 andreyex andreyex 4943 Jun 2 20:09 gnome-console-voiceover -rw-rw-r-- 1 andreyex andreyex 12721 May 29 12:29 members.2022-05-29.csv -rw-rw-r-- 1 andreyex andreyex 143 May 30 12:06 routes.yaml
Теперь мы собираемся отфильтровать его, чтобы отображались только скрытые файлы и каталоги:
andreyex@destroyer:~/toto$ ls -a | grep "^\." . .. .hidden-file .hid_dir .member.csv
Он показывает спец. (текущий каталог) и .. (родительский каталог). Вы можете отфильтровать их, используя опцию -A вместо -a.
andreyex@destroyer:~/toto$ ls -A | grep "^\." .hidden-file .hid_dir .member.csv
Здесь все еще есть небольшая проблема. Хотя вы можете видеть их в отдельных строках, вы не можете различить, файл это или каталог.
Если вы этого хотите, есть другой способ добиться этого.
Чтобы показать только скрытые файлы и каталоги в формате длинного списка (чтобы вы могли видеть, является ли это файлом или каталогом), вы можете использовать это:
ls -ld .*
Это покажет следующий результат для примера здесь:
drwxrwxr-x 3 andreyex andreyex 4096 Jun 30 10:38 . drwxr-x--- 28 andreyex andreyex 4096 Jun 29 15:15 .. -rw-rw-r-- 1 andreyex andreyex 41145 May 27 15:24 .hidden-file drwxrwxr-x 2 andreyex andreyex 4096 Jun 30 10:38 .hid_dir -rw-rw-r-- 1 andreyex andreyex 12721 Jun 3 09:41 .member.csv
Как это работает? Во-первых, часть .* является подстановкой оболочки. Он расширяется прямо на входе. Итак, в основном, вы можете думать об этом как:
ls -ld . .. .hidden-file .hid_dir .member.csv
Здесь важно использование вариант -d. Он говорит ls отображать только каталог, а не его содержимое. В противном случае команда ls также покажет содержимое файла .hid_dir.
Если вы не хотите отображать файл . и .., вы можете использовать команду ls следующим образом:
ls -ld .!(|.)
Сосредоточившись на части .!(|.), очевидно. Это закономерность .! является отрицанием и|ИЛИ состояние .(|.) ничего не означает или точка. Когда вы отрицаете это с помощью !, вы говорите, что это не должно быть «ничего» или точка. Объедините все это вместе .!(|.), и вы говорите шаблон, где . за которым следует что-то (таким образом, одна точка исключается), кроме другой точки (таким образом, исключаются двойные точки).
Вы получаете желаемый результат прямо сейчас:
-rw-rw-r-- 1 andreyex andreyex 41145 May 27 15:24 .hidden-file drwxrwxr-x 2 andreyex andreyex 4096 Jun 30 10:38 .hid_dir -rw-rw-r-- 1 andreyex andreyex 12721 Jun 3 09:41 .member.csv
Отображение только скрытых файлов без скрытых каталогов довольно просто. Использовать это:
ls -ld .* |grep -v ^d
Вы отображаете как скрытые файлы, так и каталоги, а затем отфильтровываете записи, начинающиеся с d (которые являются каталогами).
andreyex@destroyer:~/toto$ ls -ld .* drwxrwxr-x 3 andreyex andreyex 4096 Jun 30 10:38 . drwxr-x--- 28 andreyex andreyex 4096 Jun 29 15:15 .. -rw-rw-r-- 1 andreyex andreyex 41145 May 27 15:24 .hidden-file drwxrwxr-x 2 andreyex andreyex 4096 Jun 30 10:38 .hid_dir -rw-rw-r-- 1 andreyex andreyex 12721 Jun 3 09:41 .member.csv andreyex@destroyer:~/toto$ ls -ld .* |grep -v ^d -rw-rw-r-- 1 andreyex andreyex 41145 May 27 15:24 .hidden-file -rw-rw-r-- 1 andreyex andreyex 12721 Jun 3 09:41 .member.csv
Конечно, может быть несколько других возможных способов. Для таких вещей всегда есть команда find.
Если вы можете придумать другое решение, поделитесь им в разделе комментариев.