Chỉ hiển thị các tệp ẩn (tệp chấm) trong bí danh ls


43

Tôi đang sử dụng lệnh

ls -a | grep '^\.'

chỉ hiển thị các tập tin ẩn. Tôi đã thêm dòng

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

đến .bash_aliasestập tin

dường như không hiệu quả. Có lẽ đó là vấn đề với 'nhân vật.

Bạn có thể vui lòng giúp tôi viết bí danh chính xác?


với các ví dụ thậm chí còn phức tạp hơn, bạn rất hiếm khi phải chuyển từ dấu ngoặc đơn sang dấu ngoặc kép. Điều này có thể được thực hiện chỉ bằng cách hủy bỏ các trích dẫn đối với nhau. Trong ví dụ này, nó sẽ 'ls -a | grep '"'"'^\.'"'"'trông khủng khiếp (và đối với ví dụ này là hoàn toàn không cần thiết vì bạn chỉ có thể trao đổi hai dấu ngoặc kép cho một trong hai cặp), nhưng trong những trường hợp rất hiếm thì nó hữu ích. Bạn cũng có thể muốn -Ccờ (buộc đầu ra nhiều cột). Xem hình ảnh này imgur.com/a/VIVFP
Dylan

Câu trả lời:


27

Hoặc làm cho cặp trích dẫn bên trong dấu ngoặc kép:

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

Hoặc làm cho cặp trích dẫn bên ngoài dấu ngoặc kép:

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

Hoặc thực hiện tất cả các trích dẫn dấu ngoặc kép và thoát khỏi cặp bên trong:

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

Hoặc biến nó thành một hàm, để bạn có thể truyền một số đối số khi gọi:

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

90

Có shell liệt kê các tệp chấm và yêu cầu lskhông xem qua các thư mục:

ls -d .*

6
Điều này có lợi thế là cho phép liệt kê nhiều cột, không giống như grepcách tiếp cận dựa trên cơ sở.
anol

Tuy nhiên, cũng hiển thị các thư mục (như đã đề cập). Bất kỳ cách nào để giữ cho nó đơn giản như là và chỉ hiển thị các tập tin?
honzajde

@honzajde Câu hỏi không yêu cầu loại trừ các thư mục. Nếu bạn muốn loại trừ các thư mục, bạn có thể sử dụng ls -d .* | grep -v '^d'hoặc (chỉ zsh)print -lr .*(.)
Gilles 'SO- ngừng trở nên xấu xa'

điều này không hiệu quả với tôi, trên Ubuntu 16.04
Andrew_1510

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

HOẶC LÀ

Để tạo một bí danh giống nhau:

alias lh='ls -Ad .*'

HOẶC LÀ

Điều tương tự có thể được thực hiện thông qua lệnh grep và toán tử đường ống; Tuy nhiên, nó sẽ mất màu sắc và định dạng:

ls -a|grep "^\." 

HOẶC LÀ

Thông qua bí danh:

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

4

Bạn có thể sử dụng dấu ngoặc kép:

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

hoặc nối nhiều chuỗi trích dẫn đơn

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

hoặc loại bỏ ở tất cả các trích dẫn nội bộ

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

2

Đối với bản ghi này dường như không hoạt động với tôi, vì ls -ain hai (đôi khi nhiều cột hơn). Tôi sẽ khuyên bạn nên sử dụng -1tùy chọn để đảm bảo mọi tệp nằm trong dòng riêng của nó. Một cái gì đó như thế này:

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

Tôi chỉ thử ls -a | catnó vẫn xuất ra trên 2 cột. Tôi nên đề cập đến việc tôi đang sử dụng Solaris chứ không phải GNU ls. Có lẽ đó là lý do. Trong mọi trường hợp, -1giải pháp của bạn hoạt động hoàn hảo và thanh lịch hơn nhiều so với cách giải quyết khó khăn của tôi. Tôi đang cập nhật câu trả lời của tôi.
rahmu

Tôi có lẽ đã bỏ lỡ cuộc thảo luận này, nhưng hãy nhìn vào đây nếu có gì đó không ổn.
xralf

1

Làm cho nó phức tạp hơn một chút, nhưng tránh phân tích cú phápls .

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

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

Hàm hai shell sẽ sử dụng findđể tạo danh sách tất cả các tệp thông thường ẩn trong thư mục hiện tại hoặc trong thư mục được cung cấp trên dòng lệnh.

Các llshchức năng sẽ tạo ra một "dài danh sách" mà sẽ chỉ hơi dài dòng hơn ls -l, trong khi lshtạo ra một đơn cột liệt kê như ls -1.


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

HOẶC LÀ

find . -type f -name ".*" | while read file; do basename $file; done

Chào! Bạn có thể cải thiện câu trả lời của mình bằng cách giải thích chi tiết cách thức hoạt động và cũng bằng cách đề cập tại sao, theo ý kiến ​​của bạn, nó trả lời câu hỏi.
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 {} \;
        }

-1

lshỗ trợ của bạn -A? Từ 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.

Vâng, nó có, nhưng tôi muốn onlycác tập tin ẩn.
xralf

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

-3

Chỉ cần gõ lệnh dưới đây và không nhầm lẫn với các công cụ được giải thích ở trên.

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

Tôi nghĩ rằng OP đã yêu cầu làm thế nào để viết một bí danh đúng cách.
phản ứng

1
Đó chỉ là một bản sao bình luận của người ví von về câu trả lời của anh ấy / cô ấy. Để câu trả lời này hữu ích, bạn cần giải thích cách thức và lý do tại sao những lslá cờ cụ thể đó và egreplệnh trả lời câu hỏi.
Anthony G - công lý cho Monica

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

2
Bạn có thể vui lòng làm rõ câu trả lời của mình không, một dòng mã không được tính là câu trả lời hay
Romeo Ninov

theo yêu cầu anh ta chỉ cần liệt kê các tập tin ẩn. vì vậy tôi có danh sách tất cả các tập tin bao gồm các tập tin ẩn bởi ls -lart. sau đó tôi đã sử dụng regex để hiển thị các tệp bắt đầu bằng dấu chấm (.). Tôi đã thoát ra như thế này.
shailesh Chanderiya

[g906016 @ hklu2574881: [PTA] ~] $ ls-bắt đầu | sed -n "/ \. [A-Za-z0-9] [A-Za-z0-9] * / p" -rw-r - r-- 1 g906016 g906016 658 ngày 29 tháng 12 năm 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 tháng 12 năm 2016 .kshrc -rw ------- 1 g906016 g906016 27 tháng 12 năm 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 tháng 12 năm 2016. bash_profile -rw-r - r-- 1 g906016 g906016 18 29 tháng 12 năm 2016 bash_logout -rwxr-xr-x 1 g906016 g906016 0 29 tháng 12 năm 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 29 tháng 12 năm 2016 .subversion
shailesh Chanderiya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.