linux - 从命令行连接文件内容

标签 linux shell

我想创建一个 shell 脚本来读取命令行参数,然后连接这些文件的内容并将其打印到标准输出。这仅适用于文本文件。

到目前为止,我已经创建了一个错误检查以确保至少有一个参数,否则会打印错误。我已经想出如何获取当前目录中的文件并将它们连接到标准输出。

#!/bin/bash

if [ $# -eq 0 ]; then
    echo -e "Usage: concat FILE ...\nDescription: Concatenates 
FILE(s) to standard output separating them with divider -----."
    exit 1
fi

for f in *.txt; do (cat "${f}"; echo "-----"); done
exit 0

我需要调整此代码以在连接任何内容之前测试文件是否存在,我需要它来读取命令行参数并仅连接指定的文件。截至目前,此代码连接当前目录中包含“.txt”的所有内容

此脚本需要能够处理任意数量的参数,并且内容中的文本由“-----”分隔,不插入额外的空行。

我是 shell 的新手,在这方面遇到了一些麻烦。

谢谢!

最佳答案

您提到要检查文件是否存在。 *.txt 的 glob 扩展应该可以有效地做到这一点,但如果你特别偏执,你可以添加一个文件测试操作符:

if [ -f $f ];
then
   # file exists do do your stuff as above
else
   echo "whoa, that file $f that existed 4ms ago is no longer  there!"
fi

关于linux - 从命令行连接文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57937792/

相关文章:

php CLI 参数问题

c++ - "high involuntary context"开关是什么意思?

C++ 符号在共享对象中具有不同的大小

linux - 无法通过 LAN 从 Windows ping avahi 别名,但可以从其他 Linux VM ping avahi 别名

linux - nano编辑器保存后如何获取文件路径?

linux - 如何在 shell 中将 bool 表达式条件分配给变量

c - 如何用c语言编写shellcode?

ruby - 由于 gpg 错误,无法在 Ubuntu 16.04 上安装 Ruby rvm

linux - 更改目录中具有 csv 扩展名的文件名

shell - xcodebuild (Xcode 4) 的 CODE_SIGN_IDENTITY 参数