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


43

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

ls -a | grep '^\.'

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

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

в .bash_aliasesфайл

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

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


с примерами, которые еще более сложны, вам очень редко приходится переходить от одинарных к двойным кавычкам. Это можно сделать, просто сравнивая цитаты друг с другом. Для этого примера это будет '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 '^\.'; }

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 ^\\.'

2

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

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

Я только что попробовал 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

Здравствуй! Вы можете улучшить свой ответ, подробно объяснив, как он работает, а также упомянув, почему, по вашему мнению, он отвечает на вопрос.
Даг

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.

Да, это так, но я хотел 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
Шайлеш Чандерия
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.