合并不同目录中的文件在终端上运行脚本

合并不同目录中的文件在终端上运行脚本

我是 UBUNTU 新手。如何合并不同目录中的文件?使用 cat 合并所有文件是一项细致的工作。这是我知道的唯一方法。提前感谢 Saikat

答案1

当有简单的文本文件时,您可以使用>>运算符轻松合并它们。它会将前一个命令的输出添加到后指定的文件末尾。

基本程序(不适用于许多文件)

例子:

想象一下这样的目录结构:

parent
 |--a
 |  \--first.txt
 \--b
    \--second.txt

现在的内容a/first.txt

Hello! This is my first Textfile.
   ~~some lines~~
end

b/second.txt包含

    ///////////////////
   //               //
  //  second file  //
 //               //
///////////////////

因此我们可以通过输入以下内容来合并它:

$ touch merge.txt
$ cat a/first.txt >> merge.txt
$ cat b/second.txt >> merge.txt

将在当前目录中创建一个新的空文件merge.txt,并且将添加文件内容而不会覆盖,就像>会做的那样。

merge.txt现在包含:

Hello! This is my first Textfile.
   ~~some lines~~
end
    ///////////////////
   //               //
  //  second file  //
 //               //
///////////////////

完毕!

高级脚本(覆盖不同目录中的许多文件)

如果你有超过十个文件,甚至可能在十个不同的目录中,你可以创建一个bash 脚本让计算机自行完成所有选择和复制。如果您对 bash 或 shell 脚本完全陌生,我建议您事先阅读一些有关其功能的内容,并对变量和循环的出现有基本的了解,这样您就不会太困惑。

我正在使用http://www.cyberciti.biz/faq/bash-loop-over-file/作为参考。我们的脚本基本上如下所示:

#!/bin/bash

FILES="file1
/path/to/file2"

OUTPUT="merge.txt"

for f in $FILES
do
    cat $f >> $OUTPUT
done

(哦,我希望这会有用)

如果您的所有文件都具有一些与我们不想合并的其他文件不同的特征,那么这正是我们所需要的。理想情况下,它们共享一个共同的父文件夹或 anchestor 文件夹,您在其中找不到除我们的文件之外的任何其他文件。然后,我们可以/the/path/to/that/folder/*在定义变量时简单地使用它作为选择器$FILES。正如您在模型中看到的,我们可以设置多个选择器。我希望您不要太在意文件自动选择的顺序,否则我们必须想办法指定这一点……对于上面的例子,我们可以设置:

FILES="*/*"或者FILES="*/*.txt"或者FILES="a/* b/*"左右, OUTPUT="merge.txt"当然。

最后一些想法

也许我们需要注意不要选择带有 的合并文件"*",否则可能会很尴尬... 因此,上面我/每次都包含一个。您也可以简单地将其放在其他地方。

如果您的文件遵循某种模式,例如p_some-thing-axy-1,,,您可以选择一些选择器,例如p_some-thing-axy-1或等等。p_some-thing-bxz-1p_some-thing-*

现在我希望你能利用这一点,因为我出去了。

祝你好運!:D

相关内容