Hanya tampilkan file tersembunyi (file dot) di alias alias

43

Saya menggunakan perintah

ls -a | grep '^\.'

hanya menampilkan file yang disembunyikan. Saya menambahkan baris

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

ke .bash_aliasesfile

tapi ini tidak berhasil. Mungkin masalah dengan 'karakter.

Bisakah Anda membantu saya menulis alias yang benar?

xralf
sumber
dengan contoh yang bahkan lebih kompleks, Anda sangat jarang harus beralih dari tanda kutip tunggal ke ganda. Ini bisa dilakukan hanya dengan menempelkan tanda kutip satu sama lain. Untuk contoh ini, akan 'ls -a | grep '"'"'^\.'"'"'terlihat mengerikan (dan untuk contoh ini sama sekali tidak perlu karena Anda hanya dapat menukar tanda kutip ganda untuk salah satu pasangan), tetapi pada kesempatan yang sangat jarang itu berguna. Anda mungkin juga menginginkan -Ctanda (memaksa keluaran multi-kolom). Lihat gambar ini imgur.com/a/VIVFP
Dylan

Jawaban:

27

Entah buat pasangan kutip dalam kutipan ganda:

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

Atau buat pasangan terluar dari kutipan ganda:

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

Atau buat semua tanda kutip dengan tanda kutip ganda dan lepaskan pasangan batin:

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

Atau jadikan fungsi, sehingga Anda dapat memberikan beberapa argumen saat memanggil:

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

Mintalah shell mencantumkan file dot, dan katakan lsuntuk tidak melihat direktori:

ls -d .*
Gilles 'SANGAT berhenti menjadi jahat'
sumber
6
Ini memiliki keuntungan dari memungkinkan daftar multi-kolom, tidak seperti greppendekatan berbasis.
anol
Namun, menunjukkan juga direktori (seperti yang disebutkan). Adakah cara untuk membuatnya tetap sederhana sebagaimana adanya dan hanya menampilkan file?
honzajde
@honzajde Pertanyaan tidak meminta untuk mengecualikan direktori. Jika Anda ingin mengecualikan direktori, Anda dapat menggunakan ls -d .* | grep -v '^d'atau (hanya zsh)print -lr .*(.)
Gilles 'SO- stop being evil'
ini tidak berfungsi untuk saya, di Ubuntu 16.04
Andrew_1510
9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

ATAU

Untuk membuat alias yang sama:

alias lh='ls -Ad .*'

ATAU

Hal yang sama dapat dilakukan melalui perintah grep dan operator pipa; namun itu akan kehilangan warna dan pemformatan:

ls -a|grep "^\." 

ATAU

Melalui alias:

alias lh='ls -a|grep "^\."'
Pangeran Bhanwra
sumber
4

Anda dapat menggunakan tanda kutip ganda:

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

atau menyatukan lebih banyak string tunggal yang dikutip

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

atau hapus sama sekali kutipan internal

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

Sebagai catatan ini sepertinya tidak bekerja dengan saya, karena ls -amencetak dua (kadang-kadang lebih banyak kolom). Saya akan merekomendasikan menggunakan -1opsi untuk memastikan setiap file sesuai dengan caranya. Sesuatu seperti ini:

alias hidden='ls -a1 | grep "^\."'
rahmu
sumber
Saya baru mencobanya ls -a | catmasih menampilkan 2 kolom. Saya harus menyebutkan saya menggunakan Solaris dan bukan GNU ls. Mungkin itu sebabnya. Dalam semua kasus -1solusi Anda bekerja dengan sempurna dan jauh lebih elegan daripada solusi peretasan saya. Saya memperbarui jawaban saya.
rahmu
Saya mungkin melewatkan diskusi ini, tetapi lihat di sini jika ada sesuatu yang salah.
xralf
1

Membuatnya sedikit lebih rumit, tetapi menghindari penguraianls .

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

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

Fungsi dua shell akan digunakan finduntuk menghasilkan daftar semua file biasa yang tersembunyi di direktori saat ini, atau di direktori yang diberikan pada baris perintah.

The llshfungsi akan menghasilkan "panjang daftar" yang akan hanya sedikit lebih verbose dari ls -l, sementara lshmenghasilkan-kolom daftar seperti ls -1.

Kusalananda
sumber
0
find . -type f -name ".*"

ATAU

find . -type f -name ".*" | while read file; do basename $file; done
kemiko
sumber
Hai! Anda dapat meningkatkan jawaban Anda dengan menjelaskan secara rinci cara kerjanya, dan juga dengan menyebutkan mengapa, menurut pendapat Anda, jawaban itu menjawab pertanyaan.
Dhag
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 {} \;
        }
Akhil J
sumber
-1

Apakah Anda lsmendukung -A? Dari 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
sumber
Ya, memang, tapi saya ingin onlyfile tersembunyi.
xralf
ls -A -1 -d -F .* | egrep -v '/$'
waltinator
-3

Cukup ketik perintah di bawah ini dan jangan bingung dengan hal-hal yang dijelaskan di atas.

ls -A -1 -d -F .* | egrep -v '/$'
srinath
sumber
Saya pikir OP meminta cara menulis alias dengan benar.
countermode
1
Itu hanya salinan komentar waltinator pada jawabannya. Agar jawaban ini bermanfaat, Anda perlu menjelaskan bagaimana dan mengapa lsbendera-bendera khusus dan egrepperintah itu menjawab pertanyaan.
Anthony G - keadilan untuk Monica
-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"
Shailesh Chanderiya
sumber
2
Bisakah Anda menjelaskan jawaban Anda, satu baris kode tidak dihitung sebagai jawaban yang baik
Romeo Ninov
sesuai kebutuhan dia hanya perlu mendaftar file yang tersembunyi. jadi saya punya daftar semua file termasuk file tersembunyi oleh ls -lart. maka saya harus menggunakan regex untuk menunjukkan file yang dimulai dengan dot (.). Saya sudah kehabisan seperti ini.
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 Des 2016 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 29 Des 2016 .kshrc -rw ------- 1 g906016 g906016 27 Des 29 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 Des 29 2016. bash_profile -rw-r - r-- 1 g906016 g906016 18 Des 29 2016 .bash_logout -rwxr-xr-x 1 g906016 g906016 0 Des 29 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 Des 29 2016 .subversion
shailesh Chanderiya