开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
经过批量操作(一)这篇文章中,我们已经尝试批量创建功能,就一个感觉得劲的很.下面我们继续来学习一下其他行为的批量操作.
您能在这里开到啥
- 批量移动
- 批量修改
- 批量复制
- 批量删除
开始前的准备
在批量创建的文章中,我们已经完成了批量创建的脚本.这里就直接使用之前的劳动成功就行.下面我们就可以下目录结构.
.
├── batch_ts (测试项目)
│ ├── a
│ │ └── a_text.txt
│ ├── b
│ │ └── b_text.txt
│ ├── c
│ │ └── c_text.txt
│ └── d
│ └── d_text.txt
├── p_create.sh (批量创建sh)
└── p_tool.sh(工具sh)
下面开始我们批量操作吧.
批量移动
简单分析一下.既然我们要进行移动操作,命令必须是mv.之前学习中.并没有涉及到mv指令.这里我们就浅浅的学习一下,然后应用到我们的批量移动业务中.
-
mv指令
- 命令格式
mv[参数] 源文件或目录 目标文件或目录
- 参数
-
参数 含义 -b覆盖前,先执行备份 -f直接覆盖.不管文件存在不存在 -i若目标文件已存在,会咨询是否覆盖 -u如目标文件已存在,只有移动文件比目标文件新,才会执行更新操作
-
- 事例
- 修改文件名字
- 如果移动到的目标文件是文件.则执行文件名字修改操作.
- eg:
mv ts.txt tst.txt - 结果: tst.txt 修改成ts.txt名字
- 移动单个文件
- eg:
mv ts.txt a - 结果: ts.txt文件移动到a目录下
- eg:
- 移动多个文件
-
eg:
mv ts.txt ts1.txt a移动ts.txt、ts1.txt文件到a目录
-
eg:
mv *.txt a移动文件后缀是
.txt文件到a目录
-
- 修改文件名字
- 命令格式
-
实现批量移动
-
批量把后缀
.txt文件,移动到a目录下通过在批量操作(一)的实践中,可以快速的列出执行步骤.如下所示
-
寻找符合条件的所有文件或目录
-
循环执行移动操作.
基于之前的经验.这里我就不再分步讲解了.直接上代码.
# 批量移动txt文件 mvtxt() { target="*.txt" find "$project_path" -name "$target" -print0 | while IFS= read -r -d '' file; do echomsg "$file" mv "$file" "$project_demo_path/a" done } mvtxt执行结果如下所示:
-
-
批量将文件夹下指定文件移动到上级目录
# 批量移动到上级目录 mvsuptxt() { find "$project_path" -name "$target" -print0 | while IFS= read -r -d '' file; do echomsg "$file" # 获取目标文件的上级目录 supDir=$( dirname "$(dirname "$file")" || exit ) echomsg "$supDir" # 进行移动操作 mv "$file" "$supDir" echomsg "移动$file到$supDir/$file完成" done }执行结果如下所示:
-
批量修改
在shell之批量修改内容这篇文章中,我们已经知道了怎么对文件内容进行修改,这里我们就记录一下怎么对文件名字进行修改.不过还是要把文件内容修改,进行重温一下.这里就直接上代码了
-
批量修改文件内容
- 使用find批量修改文件内容
find "$project_path" -name "*.txt" -print0 | while IFS= read -r -d '' file; do if grep "shell" "$file"; then sed -i "" "s/shell/tt/g" "$file" fi done `` - 使用grep批量修改文件内容
grep -rn "tt" . | while IFS= read -r file; do sed -i "" "s/tt/shell" "$file" done
- 使用find批量修改文件内容
-
批量修改文件名称
经过上面对mv指令的学习,我们知道它有修改文件名字的功效.这里我们就直接使用mv进行修改吧.
# 第一步执行mv操作,让项目恢复到初始状态 mvtxt # 第二步,执行修改操作 changeName() { find "$project_path" -name "$target" -print0 | while IFS= read -r -d '' file; do echomsg "$file" dirpath=$( dirname "$file" || exit ) mv "$file" "$dirpath/text.txt" done }执行结果如下
批量复制
经过前面的测试和学习,到这里那不就是手到擒来.轻松的很.这里我们只需要使用
cp指令即可. 还是老样子,比如我们现在需要把所有的.txt文件.复制到文件夹e中,那我们就是先找,再创建文件,然后执行复制操作即可.看代码
cptxt() {
# 第一步找到文件
find "$project_path" -name "$target" -print0 | while IFS= read -r -d '' file; do
echomsg "$file"
# 创建e文件夹
cd "$project_demo_path" || exit
if [ ! -f "e" ]; then
mkdir -p "e"
fi
# 执行复制操作
cp "$file" "$project_demo_path/e"
done
}
执行结果如下
批量删除
这个也是很简单,直接上代码
delecttxt() {
find "$project_path" -name "$target" -print0 | while IFS= read -r -d '' file; do
echomsg "$file"
rm "$file"
done
}
执行结果如下
比如批量删除文件夹,方式都是一样的.只是替换一下查找条件即可
总结: 之前只是分享了思路,这里我也把自己再学习的时候,编写的demo也分享给大家.方便大家更好的理解.当然也算是自己学习的一个记录.
DEMO
系列文章
- shell 通用命令之find
- shell 通用命令之ls
- shell 通用命令之文件权限
- shell 通用命令之流程控制(一)
- shell 通用命令之流程控制(二)
- shell 通用命令之字符串操作
- shell之批量修改内容
- shell之批量操作(一)