Показати лише приховані файли (файли з крапками) у псевдонімі ls


42

Я використовую команду

ls -a | grep '^\.'

показ лише прихованих файлів. Я додав рядок

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

в .bash_aliasesфайл

але це не працює. Мабуть, проблема з 'характером.

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


із ще складнішими прикладами, вам дуже рідко доводиться переходити з одинарних на подвійні лапки. Це можна зробити, просто поклавши цитати один на одного. Для цього прикладу було б 'ls -a | grep '"'"'^\.'"'"'Це виглядає жахливо (і для цього прикладу це зовсім непотрібно, оскільки ви можете просто поміняти подвійні лапки для будь-якої з пар), але в дуже рідкісних випадках це корисно. Ви також можете захотіти -Cпрапор (примусовий вихід у багато стовпців). Дивіться це зображення imgur.com/a/VIVFP
Ділан

Відповіді:


26

Або зробіть внутрішню пару лапок подвійними лапками:

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 та оператора труби; однак це втратить колір і форматування:

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. Можливо, саме тому. У всіх випадках ваше -1рішення спрацювало ідеально і набагато елегантніше, ніж мій хакітський спосіб вирішення. Я актуалізую свою відповідь.
rahmu

Я, мабуть, пропустив цю дискусію, але подивіться тут, якщо щось піде не так.
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підтримка -A? Від 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 '/$'
waltinator

-3

Просто введіть команду нижче і не плутайте з описаними вище матеріалами.

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

Я думаю, що ОП запитала, як правильно написати псевдонім.
контрмоде

1
Це лише копія коментаря waltinator щодо його / її відповіді. Щоб ця відповідь була корисною, вам потрібно пояснити, як і чому саме ці lsпрапори і egrepкоманда відповідають на питання.
Ентоні Г - справедливість для Моніки

-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"

2
Чи можете ви поясніть свою відповідь, один рядок коду не вважається хорошою відповіддю
Ромео Нінов

відповідно до вимоги йому потрібно перелічити лише приховані файли. тому у мене є список усіх файлів, включаючи приховані файли, за допомогою ls -lart. тоді я використовую регулярний вираз, щоб показати, що файли, які починаються з крапки (.). У мене вийшов такий вихід.
shailesh Chanderiya

[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
shailesh Chanderiya
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.