⑴ shell批量修改文件名(笔记)
在工作中,利用 shell 批量修改文件名是常见操作,如 Nginx 日志切割时处理大量文件。以下步骤演示如何使用 shell 命令实现批量文件名修改。
首先,创建测试文件:
mkdir sub_str
[root@localhost sub_str]# touch chaochao_{1..5}_finished.jpg
[root@localhost sub_str]# touch chaochao_{1..5}_finished.png
这将生成 chaochao_1-5_finished.jpg 和 chaochao_1-5_finished.png 文件。
目标:去除所有文件的 '_finished' 后缀。
方法一:单个文件替换:
例如:mv chaochao_1_finished.jpg chaochao_1.jpg
此操作完成单个文件修改。
方法二:使用变量和子串功能:
定义变量 f:
f = chaochao_1_finished.jpg
echo ${f//_finished/}
注:全局替换 '_finished' 后缀为空。
方法三:结合思路一与二,利用反引号:
mv $f `echo ${f//_finished/}`
注:此命令修改文件名。
使用 for 语句批量处理文件名修改:
for file_name in `ls *fin*jpg`; do mv $file_name `echo ${file_name//_finished/}`; done
for 语句和 ls 命令结合,查找所有 .jpg 文件,使用正则表达式过滤出包含 '_finished' 的文件。然后,使用 mv 命令替换后缀。
理解 for 语句和正则表达式的使用有助于高效处理文件名修改任务。此过程涉及单个文件修改、使用变量和子串功能,以及利用 for 语句和反引号执行批量操作。
最后,执行此脚本完成所有目标文件名的批量修改。
⑵ 用shell命令对文件重命名
shell脚本实现文件改名小操作, 在此做一记录.
#!/bin/bash#将数据文件.SAC名改为'<sta>.[N/E/Z].SAC'#例如2014.143.20.49.21.0000.YN.BAS.00.BHE.M.SAC改为BAS.E.SACcd ../Datafor FILE in ./* do cd ./$FILE ls#先ls,显示给文件下的所有文件名,对这些文件名使用awk命令,print出相应的mv *** *** 交由bash处理,给文件重命名.ls *.SAC | awk -F"." '{print "mv "$0" "$8"."$10"."$12}' | bash rename "s/BH//" * #将BH替换为"",即删除BH# rename 's/^/filt./' *.SAC #增加前缀"filt."# rename 's/filt.//' * #删除前缀"filt." cd .. done
⑶ SHELL脚本修改文件名移动到指定文件夹
简单的写了一次, 思路如下,
脚本需要放在 test文件夹下
主要是用变量赋值分割文件名, 按照-的前后来分割
#################################
#!/bin/bash
mkdir 'ralph'
mkdir 'bessie'
for name in *.bb
do
newName=${name#*-}
q=${name%-*}
newName=${newName%.bb} #加上这句话就把.bb 删了
if [ $q = "ralph" ]; then
mv $name "ralph/$newName"
else
mv $name "bessie/$newName"
fi
done
⑷ linux下怎么通过shell批量修改文件名后缀
这个问题还是比较简单的。我们通过对变量的字符串替换就能实现。
抽风了,贴不了代码了。你参考一下咯
# linuxprobe.com
# 第4章 Vim编辑器与Shell命令脚本。
readdirectory;
if[-d$directory]
then
pushd$directory;
#HandleRenameProcess
forfnamein`ls*.txt`
do
mv$fname${fname%.*}.doc;
done
fi