如何将所有具有特定名称的文件的内容复制到一个新文件中?

Ele*_*uis 2 linux

我想要做的是搜索名称满足特定要求的所有文件(以“s”开头,后跟“1”或“2”并以“sh”结尾),然后复制所有文件的内容将这些文件转换为一个新文件(名称以 结尾.txt)。

到目前为止,我认为它应该是这样的:

cat / "s[1-2]*sh" >> /home/admin/Desktop/myFile.txt
Run Code Online (Sandbox Code Playgroud)

但它不起作用,报告

cat: /: Is a directory
Run Code Online (Sandbox Code Playgroud)

我完全没有想法。我正在运行 ubuntu 18.04.1

Fre*_*ddy 6

连接当前目录中的文件:

cat s[12]*sh > /home/admin/Desktop/myFile.txt
Run Code Online (Sandbox Code Playgroud)

要查找并连接当前目录和子目录中的文件:

find . -name "s[12]*sh" -exec cat '{}' > /home/admin/Desktop/myFile.txt \;
Run Code Online (Sandbox Code Playgroud)

要在任何地方查找和连接文件:

find / -name "s[12]*sh" -exec cat '{}' > /home/admin/Desktop/myFile.txt \;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`find -exec cat {} > out.txt \;` 完全等同于`find -exec cat {} \; > out.txt` 作为 shell 在 `find` 运行之前处理重定向,它适用于整个 `find` 过程。因此,为了清楚起见,您不妨将 `\;` 放在重定向之前。此外,您可以使用 `-exec cat {} +` 让 `find` 将多个文件名传递给每个 `cat` 调用。效果是一样的,但对于大量文件,它可以更快。 (3认同)
  • `-exec cat {} +` 会更有效,因为它会尽可能少地调用 `cat`。 (2认同)