33 通过一些程序/工具的方式来提高工作效率

前言

本文档的主题是 “通过一些程序/工具的方式来提高工作效率“ 

这里是一个假设性的需求

需要修改 大量的文件的文件名称, 比如原来文件名称是 1.txt, 2.txt, ... 100.txt

需要将 1.txt 文件名称更新为 new_1.txt, 2.txt 文件名称更新为 new_2.txt, 依次类推

这里 相关脚本基于 linux/mac, windows 上面需要 稍微作出一些小的调整

这里 主要是 介绍解决问题的思路

批量创建文件

不是这里的重点, 一笔带过, 简单的批量新建文件

master:20231025 jerry$ cat batchNewFiles.sh 
rm -rf batchFiles
mkdir batchFiles
for num in {1..100}  
do  
echo $num >> batchFiles/$num.txt
done  

最基础的方式

基于 windows/linux/mac 界面, 一个一个的点击, 更新 1.txt 为 new_1.txt, ...., 100.txt 为 new_100.txt

直到 所有文件更新完成

或者如果提供相关功能 批量选中进行修改, 可以进行 批量重命名

但是 一般的系统上面不一定有这个功能

基于自动化操作软件进行处理

比如 按键精灵, 或者 java 中有 Robot 之类 api 可以操作 鼠标, 键盘

进而 模拟以上 界面操作, 只是容易出现问题, 当然 这里也不是我们 讨论的重点

这里 一笔带过

基于 命令行 的 重命名命令

在 linux/mac 中是 ”mv $sourceFile $targetFile”, 在 windows 中是 “ren $sourceFile $targetFile“ 

一个一个的从命令行操作

”mv 1.txt new_1.txt” 然后更新 命令内容, 然后 继续执行, 直到所有文件处理完毕

通过各类 文件编辑器 来生成脚本

以上通过命令行, 实际执行的是如下脚本, 那么我们是否可以通过 其他方式生成如下脚本, 然后来批量进行执行呢?

mv 1.txt new_1.txt
mv 2.txt new_2.txt
...
mv 100.txt new_100.txt

我们这里基于普通的 notepad++ 或者 idea 的文本编辑器, 来进行处理

当然 一般的文件编辑器都可以处理, 这里仅仅是 示例

ls 一下, 发现内容如下, 将一下内容 粘贴到 文本编辑器

粘贴到文本编辑器之后内容如下, 我们执行两个替换

将每一个文件名称, 单独到一行, 替换之后内容如下, 达到了我们期望的目的

第二个替换为 将每一个 “文件名”, 替换为 “mv 文件名 新文件名” 

这里的替换如下, 可以看到 达到了 我们期望的目的

然后再保存脚本内容, 之后执行 即可实现我们的 批量替换的需求

实际处理如下, vim run.sh 的时候复制粘贴 上面生成的 批量更新名字的内容, 然后再执行, 可以看到所有的文件 均已经更新了名字

通过 node + js 来实现上面的脚本生成

当然 还是上面的思路, 实现也相当简单

新建文件 batchRenameFiles.js, 内容如下

for(var i=1; i<=100; i++) {console.log("mv " + i +  ".txt new_" + i + ".txt");
}

然后 node batchRenameFiles.js 执行之后生成命令如下

然后同样是新建 run.sh, 拷贝进脚本的相关内容, 然后执行

可以看到所有的文件 均已经更新了名字

其他编程语言

其他编程语言诸如, c, c++, java, python, scala, bash, dos 实现类似

这里仅仅 简述一些常用的, 如下是 bash 的处理方式

java 版本实现如下

输出如下

基于编程语言的相关 api 直接批量重命名

以上的重命名具体的操作是基于 bash 中的 mv 命令, 来实现文件夹的重命名

而我们这里是通过 各个编程语言提供的 文件操作 api 来实现的这块的处理, 两者是有 性质上的差别

以 node + js 实现重命名的处理

这里需要使用 fs 相关模块的功能

新建 batchRenameFilesByApi.js 内容如下

const fs = require('fs');
for(var i=1; i<=100; i++) {fs.rename("batchFiles/" + i + ".txt", "batchFiles/new_" + i + ".txt", () => {});
}

然后基于 node 执行 batchRenameFilesByApi.js 效果如下, 实现了文件的批量替换

其他编程语言

其他编程语言诸如, c, c++, java, python, scala, bash, dos 实现类似

这里仅仅 简述一些常用的, 如下是 bash 的处理方式

java 版本实现如下

更新之后文件夹下面文件如下

绕过 mv命令, 编程语言提供的api 来进行重命名的相关处理

这个就是来直接通过 read, write 系统调用 来实现重命名

不使用 具体的语言, 和相关的 api

直接和 linux 操作系统进行对接, 当然 这个也不是 这里的重点, 对于 99% 的人来说, 超纲了

这里 也不细说

引申的其他问题如何解决?

和本文档的需求类似, 也是一个架空的测试需求, 将 1.txt 的内容 和 100.txt 的内容互换, 将 2.txt 的内容 和 99.txt 的内容互换, ... 将 55.txt 的内容 和 56.txt 的内容互换

tips 提示信息

public static void swap(int a, int b) {int tmp = a;a = b;b = tmp;
}

看了本文档之后, 您的读后感?

总结

我们这里仅仅 考虑 章节3 和 章节4, 如果你仔细思考的话

你会发现 章节3 其实就是一个对于 普通编程语言的 命令行输出的一个简单的使用, 然后 配合上 bash 来实现了批量的处理功能, 几乎所有的编程语言一定会 提供一个标准输出 默认向命令行输出信息

章节4 是最基础的对于 文件相关api 的使用, 也是非常简单的东西, 如果你们大学 学过 c语言, 或者 java, 或者 js

那么 这些 常用的 api 是一定基本上都是讲过, 并且 课后也有一些 较为简单的 ”课后作业” 

那么是 什么让你在 面对这些需求的时候, 没有往这些方面考虑呢? 其实就是 人的惰性, 又或者说是不会去思考”偷懒”的方式, 你永远看到的是最简单的解决问题的方式, 你没有去思考, 思考一个问题 有很多很多的解决思路, 不同的处理方式 也有对应的优势 劣势

完 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/564391.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YiYi-Web项目介绍

YiYi-Web项目介绍 1. 简介2. 使用2.1 后端开发环境2.2 前端开发环境 3. 测试环境&#xff1a;4. 更新日志5. 打包情况6.项目截图 本项目前端是html、css、js、jQuery基础技术。 后端都是最新的SpringBoot技术&#xff0c;不分离版本&#xff0c; 是最基础的项目开发教程&#x…

手撕算法-删除有序数组中的重复项

描述 很简单&#xff0c;就是&#xff0c;遇到重复的&#xff0c;只留一个&#xff0c;保存在数组的左半边。如&#xff1a;[0,0,1,1,1,2,2,3,3,4]变为[0,1,2,3,4] 分析 使用双指针。slow指针代表没重复的数应该放置的位置&#xff0c;fast表示遍历的不重复数字的位置&…

高中信息技术教资刷题笔记_选择题篇

1.信息技术基础 位与字节的换算 模2除法运算 网页保存 进制之间的计算 教你快速学会二进制、十进制、十六进制之间的转换 - 知乎 (zhihu.com) 原码、补码、反码计算 物联网技术 位运算 按位与&#xff1a;同位置为1&#xff0c;则为1&#xff0c;其他都是0按位或&#xff1a;有…

Linux之git

一、什么叫做版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发项目的技…

看看Java Web怎么上传文件到服务器

旁白不多说了直接上主题了。 1、新建上传文件夹 在eclipse中&#xff0c;在我们前面文章中用到的项目HelloJSP&#xff0c;在webapp目录下新建uploadfiles文件夹&#xff0c;如下所示&#xff1a; 2、修改HelloWorld.jsp文件 <body><h1>文件上传</h1><…

leetcode 2671

leetcode 2671 题目 例子 思路1 使用哈希&#xff0c; unordered_map 是基于hash 实现的key,val 存储。 代码1 class FrequencyTracker {unordered_map<int, int>m;public:FrequencyTracker() { }void add(int number) {if(m.find(number) m.end()){m.insert({num…

Java学习day2

命名规则 在JAVA中&#xff0c;公共类的明朝必须与包含该类的源文件的文件名向匹配&#xff0c;即 这两个名称要一致 变量类型 与c/c基本一致 需要注意的是&#xff0c;long类型的数据在后面需要加上l或L&#xff08;建议加L&#xff0c;l可能会被误判&#xff09;&#xff…

Oracle等待事件-db file parallel read

前面两篇聊了Oracle等待事件-db file scattered read和Oracle等待事件-db file sequential read 相比于前两者等待事件只有读,但是到db file parallel 就有db file parallel read 和 db file parallel write db file parallel read是指当进程并行发出多个 I/O 请求以将数据…

关于vue3的自定义hook

把一些逻辑写在单独的ts文件里&#xff0c;vue文件使用的时候引入即可 计算属性 1、方法1&#xff1a;return计算属性 直接写出去的话&#xff0c;使用时报错 ExpirationTime是一个计算属性&#xff0c;若直接在html上使用{{ExpirationTime(orderForm)}}报错 查阅资料显示&…

【代码学习】Mediapipe人脸检测使用记录

Mediapipe&#xff0c;每秒200-300帧的实时人脸检测&#xff0c;提取画面中的人脸框&#xff0c;实现后续各种应用&#xff1a;人脸属性识别、表情识别、关键点检测、三维重建、增强现实、AI换妆等 code&#xff1a;google/mediapipe: Cross-platform, customizable ML soluti…

复旦EMBA参访娃哈哈:交流企业创新转型、家族企业管理之道

早在多年前&#xff0c;复旦EMBA同学曾参访娃哈哈集团&#xff0c;与宗庆后先生对话&#xff0c;就国内企业创新转型、家族企业管理之道、“企二代”的成长、企业社会责任等热点问题向其探讨交流。通过面对面的实地企业参访和行业领袖的深入交流&#xff0c;亲身触摸中国科创的…

结构体类型详细讲解(附带枚举,联合)

前言&#xff1a; 如果你还对结构体不是很了解&#xff0c;那么本篇文章将会从 为什么存在结构体&#xff0c;结构体的优点&#xff0c;结构体的定义&#xff0c;结构体的使用与结构体的大小依次介绍&#xff0c;同样会附带枚举与联合体 目录 为什么存在结构体&#xff1a; 结构…