我的工作目录中有几个文件,我想打印所有的文本文件,问题出在我的WD也是目录。这意味着,当我输入:
cat *
输出结果为:
9 Tom Grapes 28
10 Ben Lemon 21
11 Paul Lime 37
Next cool file
cat: yang: Is a directory
cat: ying: Is a directory
我想删除这些'错误消息',所以我尝试了:
cat *[!/]
但它只会返回:
cat: '*[!/]': No such file or directory
但反过来说:
cat */
仅打印:
cat: yang: Is a directory
cat: ying: Is a directory
这是否意味着所有文件都以斜杠结尾?如果是,有没有办法区分文件和目录?如果没有,为什么这张外卡不起作用?
PS:我正在使用Linux
答案 0 :(得分:4)
find -maxdepth 1 -type f -exec cat {} +
修改强>
忽略隐藏文件
find -maxdepth 1 -type f -name '[!.]*' -exec cat {} +
参考:Exclude hidden files when searching with Unix/Linux find?
答案 1 :(得分:2)
*
之类的任何表达式仅指文件名本身,而不是类型。除非您有不同的命名约定(例如,文件都有扩展名,目录永远不会这样做),否则很难根据文件和目录的名称来区分文件和目录。
尾随/
不是名称的一部分。
快速而肮脏的解决方案:
cat * 2>/dev/null
此添加只是抑制所有错误消息。 (实际上,它将它们重新引导到虚空。)
如果我想做得好,这将是我的第一步。它可能不是最好的解决方案,但它遍历目录中的所有条目,检查它是否是文件,并且只检查cat
个。
for f in *; do
if [[ -f $f ]]; then
cat $f
fi
done
可以写成一行:
for f in *; do if [[ -f $f ]]; then cat $f; fi; done
也许这里的其他人有更好的主意。