不服不行啊,最近遇到了一个文件批量修改名字的Linux代码需求:
CRR315530 S1F CRR315531 S1M CRR315532 S2F CRR315533 S2M CRR315534 S5F CRR315535 S5M CRR315536 S12F CRR315537 S12M CRR315538 S15F CRR315539 S15M
就是我服务器里面有上面的文本内容的第一列的这些文件,但是这些文件名字确实是有点难以理解; CRR315530/outs/web_summary.html CRR315531/outs/web_summary.html CRR315532/outs/web_summary.html CRR315533/outs/web_summary.html CRR315534/outs/web_summary.html CRR315535/outs/web_summary.html CRR315536/outs/web_summary.html CRR315537/outs/web_summary.html CRR315538/outs/web_summary.html CRR315539/outs/web_summary.html
所以需要根据前面的文本文件的第一列和第二列对应关系进行改名。然后我就随手问了chatGPT如何写代码,我很随意的提问:我需要在Linux里面批量修改文件名字,我有一个txt文件里面有两列,第一列存储的文件名字需要使用shell命令修改为第二列的? chatGPT给我的回答超级好:
在Linux中,你可以使用bash shell脚本来批量修改文件名。假设你的txt文件(假设名为names.txt )的格式如下: oldname1 newname1 oldname2 newname2 oldname3 newname3 ...
你可以使用以下的bash脚本来批量修改文件名: while read -r oldname newname do mv "$oldname" "$newname" done < names.txt
这个脚本的工作原理是这样的:read -r oldname newname 会从names.txt 文件中读取每一行,并将每一行的内容分割成两部分,分别赋值给变量oldname 和newname 。然后,mv "$oldname" "$newname" 命令会将旧文件名修改为新文件名。done < names.txt 表示这个循环会读取names.txt 文件中的每一行,直到文件结束。 注意:在运行这个脚本之前,你需要确保你有权限修改这些文件,并且这些文件确实存在。为了避免错误,你可以先在一个包含一些测试文件的目录中试运行这个脚本,看看结果是否符合你的预期。
我都不知道还可以这样的,最后的文件读取技巧,以及读取接下来两列文件居然可以使用样的:read -r oldname newname 会从names.txt 文件中读取每一行,并将每一行的内容分割成两部分,分别赋值给变量oldname 和newname 。 可以看到,完美改名了: S12F/outs/web_summary.html S12M/outs/web_summary.html S15F/outs/web_summary.html S15M/outs/web_summary.html S1F/outs/web_summary.html S1M/outs/web_summary.html S2F/outs/web_summary.html S2M/outs/web_summary.html S5F/outs/web_summary.html S5M/outs/web_summary.html
虽然我写出不来但是我看得懂chatGPT给我的代码,因为有Linux基础,感觉从此以后大家都很少需要把一个技术学到出神入化了,因为再怎么厉害也不可能比chatGPT厉害,但是对技术的基本认知是需要的,不然看不懂chatGPT给我们的回答也不敢直接使用chatGPT给我们的代码,在Linux操作系统很多代码很危险。 而且,chatGPT有时候会给出一下似是而非的,暗藏bug的代码,这些都需要我们有基础认知才有可能更好的利用chatGPT的辅助。
|