如何在Bash中向目录中所有文件的所有行追加字符串?

如何在Bash中向目录中所有文件的所有行追加字符串?,bash,Bash,我想向目录层次结构中的所有文件行追加一个字符串。我知道如何通过sed命令对单个文件执行此操作: sed -e 's/$/ sample string/' -i test.txt 但是,如何编写一个脚本,对目录层次结构中的所有文件(及其子目录和子目录等等)执行此操作 对于目录层次结构中的所有文件(及其子目录和子目录等…) 这是一个查找的工作,简单明了 例如,命令: find . -type f -exec sed -i 's/$/ sample string/' {} \; 将对当前目录下的所

我想向目录层次结构中的所有文件行追加一个字符串。我知道如何通过
sed
命令对单个文件执行此操作:

sed -e 's/$/ sample string/' -i test.txt
但是,如何编写一个脚本,对目录层次结构中的所有文件(及其子目录和子目录等等)执行此操作

对于目录层次结构中的所有文件(及其子目录和子目录等…)

这是一个查找的工作,简单明了

例如,命令:

find . -type f -exec sed -i 's/$/ sample string/' {} \;
将对当前目录下的所有常规文件执行
sed
命令

find
命令有更多的选项(深度限制、不跨越文件系统边界、仅处理某些文件掩码等),您可以使用这些选项,但上面的选项可能就是您当前问题所需的全部选项


请记住,
sed-i
正在进行编辑,因此,如果您犯了错误,最好确保您已经备份了原始文件

如果要创建新文件(根据注释中的要求),可以绕过
-i
创建新文件。最安全的方法可能是将要执行的命令放入可执行脚本中(例如,
myprog.sh
):

然后从您的
查找中调用它:

find . -type f -exec myprog.sh {} \;

然后,您可以将目标文件名设置为从原始文件计算出的任意复杂值。

但现在我必须重命名所有这些文件,并在文件扩展名之前向文件名添加字符串。例如:
msg.properties
msg\u fa.properties
我只有一个小问题,当
sed
将我的字符串添加到行的末尾时,我希望首先从其末尾删除现有的回车(
^M
),然后在放置字符串后插入它(而不是
sed
's
LF
find . -type f -exec myprog.sh {} \;