我如何对点文件执行“ls”?

我如何对点文件执行“ls”?

在点文件上执行 ls

我的目录包含:

$ ls -A    
.dotfile20091021   file20091020       file20091021

我想列出名称中包含 20091021 的所有文件。

如果我运行:

$ ls -A *20091021*    
file20091021

如果我运行:

$ ls -A .*20091021*    
.dotfile20091021

我可以用一个“ls”命令获取这两个文件吗?

答案1

根据此链接有一个 bash 选项可以用于 glob 点文件:

shopt -s dotglob

如果你使用 bash 那么之后你需要做的就是:

ls -A *20091021*

(这里无法测试)

答案2

ls -A1 | grep "20091021"

答案3

你可以简单地做

ls -a *20091021 .*20091021

(严格遵守您的要求,您希望在单个中完成此操作ls

答案4

您依赖(无论您使用什么 shell)来进行全局扩展。

ls -lah | grep \.foo

.. 可能有助于您以便携的方式解决这个问题。

例如:

user@tower:~ ls -lah | grep \.mozilla
drwx------  3 root root 4.0K 2007-11-14 06:17 .mozilla
user@tower:~    

看看管道的威力吧 :) 扩展它需要读者练习。shopt 不可移植,在使用严格 POSIX shell(如 dash)的系统上它会崩溃。最好写得简单、可移植……否则你会将经过验证的脚本上传到运行其他发行版的机器上,然后看着它崩溃,非常糟糕。

注意,每个 shell 都以自己的方式进行全局扩展,这大致由其许可证决定。请尽量避免使用 bashism。Ubuntu 花费了数万美元来消除其产品中的这些内容。

相关内容