使用cat同时显示目录中的所有文件

使用cat同时显示目录中的所有文件

我正在编写一个脚本,该脚本允许我查看整个选定目录中每个文件的内容,但我不太知道该怎么做。

我正在考虑将 的输出通过管道输送lscator中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之前插入.-execfind

使用它:

  • 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

相关内容