我正在编写一个脚本,该脚本允许我查看整个选定目录中每个文件的内容,但我不太知道该怎么做。
我正在考虑将 的输出通过管道输送ls
到cat
or中less
,但这似乎不起作用。
是否有我需要使用的命令行变量或者是否有可以满足我的需要的命令?
我想要这个,这样每当我寻找某个我不记得的文件时,我就可以快速了解文件的内容。
答案1
这正是cat
目的。如果要显示目录中所有文件的内容,请使用
cat *
shell 将扩展*
到文件列表。如果您还想包含隐藏文件,请使用
cat * .*
或者
shopt -s dotglob; cat *
但是,如果您只是想快速识别文件,这可能不是最好的主意,特别是当文件很长时。
head
在这种情况下使用可能会有所帮助:
head *
将显示目录中每个文件的前十行,标题行给出文件名。
答案2
看 ”为什么*不*解析`ls`?“为什么解析 的输出ls
可能不是一个好方法。
对于您的脚本:
#!/bin/sh
dir="$1"
PAGER="${PAGER:-cat}"
test -d "$dir" || exit 1
find "$dir" -type f -exec "$PAGER" {} \;
这将采用第一个命令行参数并将其分配给变量dir
。如果用户尚未将其设置为其他值,则该变量PAGER
将被设置为。cat
如果给定目录是有效的目录名,find
则用于将该目录或其任何子目录中的所有常规文件(包括隐藏的常规文件)传递给分页器。
要将文件搜索限制为仅给定目录的第一级,请在选项-maxdepth 1
之前插入.-exec
find
使用它:
cat
所有文件位于/tmp
:$ ./script /tmp
查看主目录中所有文件的前 10 行:
$ PAGER=head ./script "$HOME"
阅读
~/stories
目录中的所有故事:$ PAGER=less ./script "$HOME/stories"
扩大:
#!/bin/sh
dir="$1"
suf="$2"
PAGER="${PAGER:-cat}"
test -d "$dir" || exit 1
find "$dir" -type f -name "*$suf" -exec "$PAGER" {} \;
这将允许脚本采用额外的文件名后缀,例如
$ ./script /tmp .txt