Показывать только скрытые файлы (точечные файлы) в псевдониме ls

43

Я использую команду

ls -a | grep '^\.'

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

alias hidden='ls -a | grep '^\.'' # show only hidden files

в .bash_aliasesфайл

но это не работает. Вероятно, это проблема с 'характером.

Не могли бы вы помочь мне написать правильный псевдоним?

xralf
источник
с примерами, которые еще более сложны, вам очень редко приходится переходить от одинарных к двойным кавычкам. Это можно сделать, просто сравнивая цитаты друг с другом. Для этого примера это будет 'ls -a | grep '"'"'^\.'"'"'выглядеть ужасно (и для этого примера это совершенно не нужно, потому что вы можете просто поменять двойные кавычки для любой из пар), но в очень редких случаях это полезно. Вам также может потребоваться -Cфлаг (принудительный вывод нескольких столбцов). Посмотреть это изображение imgur.com/a/VIVFP
Дилан,

Ответы:

27

Либо сделайте внутреннюю пару кавычек двойными кавычками:

alias hidden='ls -a | grep "^\."'

Или сделайте внешнюю пару кавычек двойными кавычками:

alias hidden="ls -a | grep '^\.'"

Или сделайте все кавычки двойными кавычками и избегайте внутренней пары:

alias hidden="ls -a | grep \"^\.\""

Или сделайте это функцией, чтобы вы могли передавать некоторые аргументы при вызове:

hidden() { ls -a "$@" | grep '^\.'; }
manatwork
источник
90

Сделайте так, чтобы оболочка перечислила точечные файлы и запретила lsпросматривать каталоги:

ls -d .*
Жиль "ТАК - перестань быть злым"
источник
6
Преимущество этого состоит в том, что, в отличие от grepподхода, основанного на столбцах, можно создавать списки из нескольких столбцов .
анол
Тем не менее, показывает также каталоги (как уже упоминалось). Есть ли способ сохранить все как есть и показывать только файлы?
Honzajde
@honzajde Вопрос не задавал, чтобы исключить каталоги. Если вы хотите исключить каталоги, вы можете использовать ls -d .* | grep -v '^d'или (только zsh)print -lr .*(.)
Gilles 'SO- перестань быть злым'
это не работает для меня, на Ubuntu 16.04
Andrew_1510
9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

ИЛИ

Чтобы создать псевдоним одного и того же:

alias lh='ls -Ad .*'

ИЛИ

То же самое можно сделать с помощью команды grep и оператора pipe; однако это потеряло бы цвет и форматирование:

ls -a|grep "^\." 

ИЛИ

Через псевдоним:

alias lh='ls -a|grep "^\."'
Принц бханвра
источник
4

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

alias hidden="ls -a | grep '^\.'"

или объединить несколько строк в одинарных кавычках

alias hidden='ls -a | grep '\''^\.'\'

или удалить все внутренние кавычки

alias hidden='ls -a | grep ^\\.'
enzotib
источник
2

Для записи это, кажется, не работает со мной, так как ls -aпечатает два (иногда больше столбцов). Я бы рекомендовал использовать -1опцию, чтобы убедиться, что каждый файл находится в отдельной строке. Что-то вроде этого:

alias hidden='ls -a1 | grep "^\."'
rahmu
источник
Я только что попробовал ls -a | catеще выводит на 2 колонки. Я должен отметить, что я использую Solaris, а не GNU ls. Может быть, поэтому. Во всех случаях ваше -1решение работало отлично и намного более элегантно, чем мой хакерский обходной путь. Я обновляю свой ответ.
раму
Я, вероятно, пропустил эту дискуссию, но посмотрите здесь, если что-то пойдет не так.
xralf
1

Делать это немного сложнее, но избегать разбораls .

llsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -ls; }

lsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -print; }

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

llshФункция будет генерировать «длинный перечень» , который будет только немного более многословным , чем ls -l, в то время как lshгенерирует один столбец списка , как ls -1.

Кусалананда
источник
0
find . -type f -name ".*"

ИЛИ

find . -type f -name ".*" | while read file; do basename $file; done
kemiko
источник
Здравствуй! Вы можете улучшить свой ответ, подробно объяснив, как он работает, а также упомянув, почему, по вашему мнению, он отвечает на вопрос.
Даг
0
# add it to ~/.bashrc

    hidden() {  # lists hidden files and directories
        find . -maxdepth 1 -name '.?*' -exec ls --color -d {} \;
        }

    hiddenfiles() { # lists hidden files
        find . -maxdepth 1 -type f -name '.?*' -exec ls --color -d {} \;
        }

    hiddendirs() { # lists directories
        find . -maxdepth 1 -type d -name '.?*' -exec ls --color -d {} \;
        }
Ахиль Дж
источник
-1

Ваша lsподдержка -А? От man ls:

    -a, --all
          do not ignore entries starting with .

   -A, --almost-all
          do not list implied . and ..

$ ls --version
ls (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  
Written by Richard M. Stallman and David MacKenzie.
waltinator
источник
Да, это так, но я хотел onlyскрытые файлы.
xralf
ls -A -1 -d -F .* | egrep -v '/$'
вальтинатор
-3

Просто введите команду ниже и не путайте с вышеописанным.

ls -A -1 -d -F .* | egrep -v '/$'
Сринат
источник
Я думаю, что ОП спросил, как правильно написать псевдоним.
режим
1
Это просто копия комментария вальтинатора к его / ее ответу. Чтобы этот ответ был полезным, вам нужно объяснить, как и почему эти конкретные lsфлаги и egrepкоманда отвечают на вопрос.
Энтони Дж. - правосудие для Моники
-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"
Шайлеш Чандерия
источник
2
Не могли бы вы уточнить свой ответ, одна строка кода не считается хорошим ответом
Ромео Нинов
согласно требованию ему нужно перечислить только скрытые файлы. поэтому у меня есть список всех файлов, включая скрытые файлы с помощью ls -lart. Затем я использую регулярное выражение, чтобы показать, что файлы начинаются с точки (.). У меня такой выход.
Шайлеш Чандерия
[g906016 @ hklu2574881: [PTA] ~] $ ls -lart | sed -n "/ \. [A-Za-z0-9] [A-Za-z0-9] * / p" -rw-r - r-- 1 g906016 g906016 658 29 декабря 2016 года .zshrc -rw- r - r-- 1 g906016 g906016 171 29 декабря 2016 года .kshrc -rw ------- 1 g906016 g906016 27 декабря 2016 года .k5login -rw-r - r-- 1 g906016 g906016 176 29 декабря 2016 года. bash_profile -rw-р - r-- 1 g906016 g906016 18 29 декабря 2016 .bash_logout -rwxr-хт-х 1 g906016 g906016 0 29 декабря 2016 .dir_colors drwxr-х --- 3 g906016 g906016 4096 29 декабря 2016 .subversion
Шайлеш Чандерия