Zna*_*kus 32 command-line files
在命令行中,显示多个文件内容的最简单方法是什么?我的目录如下所示。
./WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b
./xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM
./GZnATXO1e5Hh3Bz1bhgJjjwheIjjZqtnXR0hfOyj
./mWz7ehBNoTZmtDh8JG6sxw2lMJFwIovPzxDGECUY
./JN65F5v3RL2ilHPqNSx9N9D4lvVpqpbJ9lASd8TJ
./At9PS4y4nTiXUO0Z0USnbYkTPBla1msQRpwuruqE
./YiPyMZPCaUDZTiTczAvWII9bJrUqLXCFtH2pXEA2
./JoakdlbRFPwAvWp1d4n8RvMoyMeizCoiriL2Sn2U
./wFPWZUus8Yu7UtESGABLCoqDg36cT90USO0xuyUr
./qseI9PgV1EJfZCDyGGeVytajqG7JeX0r7eA5S1JW
./zgFJpNgXyCsaVh38aCuMGuzHwIbwSNB6rQDdh27x
./.htaccess
Run Code Online (Sandbox Code Playgroud)
现在我想查看除.htaccess. 它可能看起来像:
WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b:
Contents of file WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b.
xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM:
Contents of file xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM.
[...]
Run Code Online (Sandbox Code Playgroud)
我认为这应该可以通过 find、xargs 和 cat 的组合来实现,但我还没有弄清楚如何。谢谢你的时间!
Gil*_*il' 46
如果您传递多个文件参数,则这两个标准命令head和tail打印带有文件名的标题。要打印整个文件,请使用tail -n +1(从第一行开始打印,即所有内容)。
在这里,您似乎想要查看除名称以点开头的单个文件之外的所有文件。点文件在 unix 下是“隐藏的”:它们不会出现在默认输出ls或通配符匹配中。因此匹配每个非隐藏文件只需使用*.
tail -n +1 *
Run Code Online (Sandbox Code Playgroud)
(严格来说,tail -n +1 -- *如果其中一个文件名以-.开头,则需要。)
Mic*_*zek 21
您可以通过以下方式完成所有操作find:
$ find . -type f -not -name .htaccess -printf "\n%p\n" -exec cat {} \;
Run Code Online (Sandbox Code Playgroud)
这告诉在当前目录 ( ) 中find查找所有文件 ( -type f),.除了 ( -not) 一个名为.htaccess( -name .htaccess) 的文件。然后它打印 ( -printf) 一个换行符,后跟文件名 ( %p),然后cat在文件 ( -exec cat {} \;)上运行。这将为您提供如下输出:
test/test3
Line 1
test/test2
Line 1
test/test1
Line 1
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud)
如果您经常这样做,可能值得将其粘贴在 shell 脚本或函数中;我有一个名字cats就是这样做的:
#!/bin/bash
for filename; do
echo "\033[32;1m$filename\033[0m"
cat "$filename"
echo
done
Run Code Online (Sandbox Code Playgroud)
它遍历每个文件名参数,打印出文件名(以粗体绿色显示),然后对文件进行分类:

那么命令就是:
$ find . -type f -not -name .htaccess -exec cats {} \+
Run Code Online (Sandbox Code Playgroud)
要显示当前文件夹中所有文件的内容,请尝试:
grep -vI "\x00" -- *
Run Code Online (Sandbox Code Playgroud)
和类似的,但递归:
grep -vIr "\x00" -- .
Run Code Online (Sandbox Code Playgroud)
格式为:filename: content.
要具有与建议类似的格式,它将是:
grep -rvl "\x00" -- * | while read file; do printf "\n\n#### $file ####\n"; cat $file; done
Run Code Online (Sandbox Code Playgroud)
旁注:
\x00在上面的例子中使用 NUL ( ) 会阻止显示二进制文件(这-I实际上是这样做的,但我们仍然必须使用某种模式)。*),它会自动忽略隐藏文件,例如.htaccess.另请参阅:grep:显示文件名一次,然后在 Unix SE 上显示带有行号的上下文