多行打印结果

多行打印结果

我试图在下面找到日志文件/usr/

$ echo /usr/**/log
/usr/bin/log /usr/lib/log /usr/local/Cellar/ruby/2.5.1/lib/ruby/gems/2.5.0/doc/rubygems-2.7.6/ri/Gem/Resolver/Molinillo/DependencyGraph/log /usr/local/Cellar/ruby/2.5.1/share/ri/2.5.0/system/Gem/Resolver/Molinillo/DependencyGraph/log 

它打印成一行很难阅读,

$ for i in /usr/**/log; do echo $i; done
/usr/bin/log
/usr/lib/log
/usr/local/Cellar/ruby/2.5.1/lib/ruby/gems/2.5.0/doc/rubygems-2.7.6/ri/Gem/Resolver/Molinillo/DependencyGraph/log
/usr/local/Cellar/ruby/2.5.1/share/ri/2.5.0/system/Gem/Resolver/Molinillo/DependencyGraph/log
/usr/local/Cellar/ruby/2.5.1/share/ri/2.5.0/system/WEBrick/log
/usr/local/lib/python3.6/site-packages/zmq/log
/usr/local/lib/ruby/gems/2.5.0/doc/rubygems-2.7.6/ri/Gem/Resolver/Molinillo/DependencyGraph/log
/usr/local/var/log
/usr/share/zsh/5.3/help/log

有没有一种单行解决方案来代替结构化代码?

答案1

使用printf包含格式说明符来打印带有换行符的字符串。此外,除非有充分理由不这样做,否则在 shell 脚本中引用变量始终是安全的。

还打开nullglob忽略未扩展的全局匹配的选项

shopt -s nullglob
printf '%s\n' /usr/**/log

答案2

使用find

find /usr -name log

这将是一种查找名称log位于目录中或目录下任何位置的所有条目的路径名的可移植方法/usr。要仅限于常规文件,请添加-type f

find /usr -type f -name log

echo将其所有操作数打印在一行上,以空格字符分隔,并在末尾以换行符分隔。这就是为什么您没有从第一个命令中获得多行输出的原因。

相关内容