用于添加信息的linux命令

用于添加信息的linux命令,linux,command,Linux,Command,有没有办法在一个驱动器中找到所有的.java文件,并使用linux命令添加文本“author name:man”…如果您不介意内联执行,您是想以破坏性的方式执行还是复制 find-name*.java-exec add_text.sh{}\ 其中add_text.sh如下所示 #!/bin/sh $input_file = $1 $header_file = /path/to/the/header/file/you/want/to/insert/ mv ${input_file} ${input

有没有办法在一个驱动器中找到所有的.java文件,并使用linux命令添加文本“author name:man”…如果您不介意内联执行,您是想以破坏性的方式执行还是复制

find-name*.java-exec add_text.sh{}\

其中
add_text.sh
如下所示

#!/bin/sh
$input_file = $1
$header_file = /path/to/the/header/file/you/want/to/insert/
mv ${input_file} ${input_file}_tmp
cat $header_file ${input_file}_tmp > ${input_file}
警告:这是未经测试的
:)

最简单的是

find ./ -name '*.java' -exec echo "author name :man" >> {} \;
直流电

来解释上面的内容

第一个
find
是命令。它的任务是找到符合特定标准的文件,并可以选择执行某些操作,这是一个非常强大的工具

/
是要搜索的目录,在本例中,/表示当前目录。如果希望它搜索整个计算机,请使用
/
如果希望它只搜索特定文件夹或子文件夹,请使用
/文件夹/子文件夹
cd
到该目录,并使用上面示例命令中的
/

-name
告诉find您正在查找一个名称紧跟其后的文件,在本例中,我们告诉它搜索任何以
.java
结尾的文件。这就是为什么通配符
*
在名称周围加上单引号的原因,如
'*.java'
中所示,以防止“Shell扩展”google获取更多信息

-exec
告诉find,对于每个文件,执行它后面的命令,在这种情况下,命令是
echo“author name:man”>{}
,这意味着回显(写入)字符串“author name:man”,并将其附加到找到的文件中。“查找”将标记
{}
替换为文件名,它与当前文件夹(例如,运行命令时所在的文件夹)相关<代码>\
告诉find这是命令的结束。如果需要,还可以使用其他命令(必须使用逻辑操作,如
-和

因此,为了进行测试,请在服务器中运行ssh并运行以下命令

 find / -name '*.java'
这将查找服务器上扩展名为.java的所有文件。这可能需要很多时间

完成后,让我们尝试
-exec
一些最好不会造成任何损坏的东西,因此请尝试此命令

find / -name '*.java' -exec ls -alh {} \;
这会告诉find为它找到的每个以.java结尾的文件运行ls命令

您现在应该能够使用find来完成所需的操作

cd到包含要修改的java文件的文件夹的根目录,然后运行该命令 当然,不要忘记在java文件中添加纯文本会破坏它。确保文本采用注释的形式

也许更好的命令是

find ./ -name '*.java' -exec cat authors.txt >> {} \;
其中authors.txt包含要添加的数据。上面的命令将把authors.text的全部内容附加到它找到的每个.java文件中

小心,这个命令非常强大,而且“伴随着强大的力量而来”。。。某物

换言之,在运行进行大规模更改的命令之前,请确保首先备份所有内容。你也许会后悔

直流电

最后,将细节预先添加到文件中有点复杂,因为hhafez已经声明,您可以使用另一个脚本来为您执行此操作

创建脚本addauthor.sh

 #!/bin/bash
cat authors.txt > /tmp/tempfile
cat $1 >> /tmp/tempfile
cp --reply=yes /tmp/tempfile $1
并将find命令修改为

find ./ -name '*.java' -exec sh addauthor.sh {} \;
先测试一下


DC

当然,这将附加文件。所以它是一个页脚,而不是页眉。所以我更改了我的答案,将其添加到页眉中,所以我的解决方案应该如您所期望的那样工作。可能无法处理路径中带有空格的名称。。。克里斯给出了什么解决方案。。。它正在创建{}文件并添加信息…但我希望将信息添加到所有的.java文件中…请帮助我…我陷入了深深的麻烦中Hafeez我是linux新手。。。你真的可以分步执行吗?chris的解决方案应该按原样工作,只需在命令行键入并按enter键,它就会工作。使用chris命令,将创建一个文件{}。。。。但我的问题是在驱动器中的所有.java文件的头上添加我的注释,如/*man*/,如果键入的是正确的,则不会用文件名替换{}hi。。。chris…你能给我一个执行cmnd的分步解决方案吗?hafeez我试过你的解决方案。。。。但它不起作用。。。或者请告诉我解决这个问题的方法