У меня есть каталог, содержащий тысячи файлов, некоторые из них скрыты.
Команда ls -a
перечислите все файлы, включая скрытые, но мне нужно просто перечислить скрытые файлы.
Какую команду я должен использовать?
У меня есть каталог, содержащий тысячи файлов, некоторые из них скрыты.
Команда 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
ls -d .*
нежелательно показывает .
и ..
ls -d .?*
(текущий принятый ответ) нежелательно показывает ..
ls -d .[!.]*
нежелательно не будет проявляться ..i_am_also_a_hidden_file.txt
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 ." будет работать