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

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

ls -a | grep '^\.'

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

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

в файл .bash_aliases

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

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

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

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

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

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

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

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

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

 hidden() { ls -a "$@" | grep '^\.'; } 

Попросите оболочку перечислить файлы точек и скажите ls чтобы они не просматривали каталоги:

 ls -d .* 
 ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting 

ИЛИ

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

 alias lh='ls -Ad .*' 

ИЛИ

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

 ls -a|grep "^\." 

ИЛИ

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

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

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

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

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

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

или удалить во всех внутренних котировках

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

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

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

Сделать это несколько сложнее, но избегая разбора ls .

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

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

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

Поддерживает ли ваша поддержка? От 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. 
 find . -type f -name ".*" 

ИЛИ

 find . -type f -name ".*" | while read file; do basename $file; done 
 ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p" 

Просто введите команду ниже и не смутитесь с приведенными выше объяснениями.

 ls -A -1 -d -F .* | egrep -v '/$'