如何从/ etc中列出以“ a”或“ c”开头的文件。[关闭]


10

我试过了,ls /etc/[ac]*但是它显示了以ac开头的目录及其全部内容,而不是以“ a ”或“ c ” 开头的文件。


目录是许多文件类型之一。您对哪种类型的文件感兴趣(常规,符号链接,设备,管道,套接字...)?
斯特凡Chazelas

目前尚不清楚您是通过“目录”来谈论目录的内容,还是谈论目录名称本身。您显示的命令将列出与模式ls -d /etc/[ac]*匹配的目录的内容,而您不会获得与目录匹配的内容,但仍会看到目录名称。目前尚不清楚这是您想要的还是要避免甚至列出目录名称。
Kusalananda

Answers:


23

为了避免列出目录的内容,您可以:

ls -d /etc/[ac]*

这将列出目录名称以及以a或开头的普通文件名c

为了完整性,不涉及的解决方案find可能是:

ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9

我对该问题的初步阅读ls -d似乎也很恰当,但是似乎原始问题指定了无论扩展还是非扩展都不应列出目录。
克里斯·

1
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9不要解析ls
Avinash Raj 2014年

1
@AvinashRaj:嗯,该建议的相关性取决于是否需要这种解决方案一次或永久地起作用。如果只有一次,那么ls我认为解析是公平的游戏。
Greg Hewgill

3
他确实有一点。尽管输入中的名称/etc很有可能是理智的,但ls由于字段编号会发生变化,因此使用简单的空格会破坏方法。+1 ls -ld
terdon

1
您还需要修复语言环境(LC_ALL=C),不保证日期在其他语言环境中具有3个字段。
斯特凡Chazelas

7

递归地:

find /etc -type f -name '[ac]*'

如果您需要非递归,则可以方便地执行此操作:

find /etc/. ! -name . -prune -type f -name '[ac]*'

或者,这是非便携式的(GNU或最近的BSD查找):

find /etc -type f -maxdepth 1 -name '[ac]*'

如果您希望不区分大小写,请使用-iname代替-name


1
请注意,这-type f是针对常规文件的。相反,如果您需要非目录文件,则替换为! -type d(如果您还希望排除指向目录的符号链接,则替换! -xtype d为GNU find)。
斯特凡Chazelas

1

您也可以尝试使用此命令,

for file in /etc/[ac]*; do echo $file; done | xargs file | awk -v FS=" +" '$2~/directory/ {next;} {print $1}' | sed 's|\/etc\/||g;s/://g'

1

如果需要目录(而不是目录的内容)和文件,则可以使用printfbultin:

printf "%s\n" [ac]*

例:

$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt

按照问题的要求,这将如何避免使用目录?
克里斯·

哦,我看错了。我认为OP需要目录,但不需要目录。
cuonglm

抱歉,该编辑完全被误读了。
terdon

1

非递归,无find

ls -pd /etc/[ac]* | grep -v '/$'

-p增加了/在年底的目录,其grep过滤掉。当然,对于包含特殊字符(如换行符)的文件名不起作用。


1

zsh

print -rl /etc/[ac]*(.)

将列出常规文件(如在-type ffind)中列出/etc的名字开始与ac(xxx)球形末尾的部分是特定于zsh的功能,称为球形限定符。.作为限定符表示常规文件

如果glob不匹配,zsh将中止命令。请注意,在其他类似Bourne的shell中,如果glob不匹配,则模式会扩展为自身,因此如果没有以或in 开头ls -d /etc/[ac]*的文件,可能会错误地列出名为/etc/[ac]*的文件。ac/etc

print -rl /etc/[ac]*(^/)

将列出不是目录类型的文件,并且

print -rl /etc/[ac]*(-^/)

解决符号链接后,将列出不是目录类型的文件。


-3

对于以a开头的显示文件:

ls etc |  grep ^a

用于显示以c开头的文件:

ls etc |  grep ^c
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.