shell/bash 脚本批量修改文件名,名称依照文件时间排序并且文件名含有空格

本文介绍了一个bash脚本,用于根据文件的拍摄时间顺序批量修改照片文件名,尤其适用于处理含有空格的文件名。通过在终端运行脚本并指定照片文件夹路径,可以实现方便的文件重命名。参考链接提供了关于bash脚本中特殊变量的含义。
摘要由CSDN通过智能技术生成

用手机拍摄延时摄影照片,照片文件名不是Premiere认可的序列名字,所以需要更改照片名字,这个脚本可以根据文件时间顺序对文件名进行批量更改,并且原文件名中如果含有空格也可以处理,代码细节可以自行修改,我就不做太多阐释了。

程序

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

i=1
cd $1
for file in $(ls -rt *.jpg)
do
	# echo $file
	# echo $i
	mv "$file" "img_$i.jpg"
	let i++
done
IFS=$SAVEIFS

使用方法:

  1. cd到照片文件夹的上一级文件夹,比如照片在project/photo下面,就cd project
  2. 创建这个脚本文件,可以随便怎么创建,比如touch chname.sh
  3. 把代码写入这个脚本文件,可以用vim
  4. 更改权限可运行,chmod +x chname.sh
  5. 运行脚本,第一个参数是照片文件夹名字,./chname.sh photo

效果展示

这是原文件
在这里插入图片描述
这是运用脚本修改名称后的样子
在这里插入图片描述
这是终端里面的指令
在这里插入图片描述

参考:

  1. 你知道Shell脚本中$0 $1 $# $@ $* $? $$ 都是什么意思吗?https://os.51cto.com/article/684975.html
  2. BASH Shell: For Loop File Names With Spaces https://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html
### 回答1: 可以使用shell脚本批量修改文件名。 具体步骤如下: 1. 进入需要修改文件名的目录。 2. 编写shell脚本,使用for循环遍历目录下的所有文件,使用mv命令修改文件名。 例如,将所有以txt结尾的文件名中的“old”替换为“new”,可以编写如下脚本: ``` #!/bin/bash for file in *.txt do mv "$file" "${file/old/new}" done ``` 3. 保存脚本并运行,即可批量修改文件名。 注意事项: - 在使用mv命令修改文件名时,需要使用双引号将文件名括起来,以防止文件名中包含空格等特殊字符导致命令执行失败。 - 在使用${file/old/new}语法替换文件名中的字符串时,需要将old和new替换为实际需要修改的字符串。 - 在运行脚本前,建议先备份原始文件,以防修改出错导致文件丢失。 ### 回答2: Shell 是一种常用的命令行解释器,其功能丰富,包括批量修改文件名批量修改文件名主要利用 Shell 的批量处理功能和文件操作命令完成。 批量修改文件名的具体步骤如下: 1. 确定需要修改的文件名格式。例如,需要将文件名中的“abc”替换成“def”。 2. 进入文件所在的目录。 3. 使用 for 循环遍历目录下的所有文件,获取文件名: ``` for file in * do echo $file done ``` 4. 在循环中使用 sed 命令对文件名进行修改。例如,将所有“abc”替换成“def”: ``` for file in * do newfile=$(echo $file | sed 's/abc/def/g') mv $file $newfile done ``` 其中,sed 命令中的“s”表示替换,后面的“abc”表示要被替换的字符串,“def”表示替换成的字符串,最后的“g”表示全局替换。 5. 执行上述命令后,文件名就会被批量修改。 需要注意的是,执行修改操作时需要小心,避免误操作导致文件丢失或损坏。为了确保安全,可以先使用 ls 命令检查文件名是否符合要求,再进行修改操作。另外,也可以备份文件,以防止误操作。 总之,批量修改文件名Shell 的一个实用功能,可以帮助用户快速、方便地完成文件重命名任务。只要注意安全,掌握正确的操作方法,就可以轻松实现批量修改文件名。 ### 回答3: 在使用 shell 进行批量修改文件名的时候,我们通常会使用一些 shell 命令和通配符来进行操作。下面我结合实际案例和相关命令来具体讲解一下。 假设我们有一个目录下面有一批文件需要修改名称,这些文件的原名称均以 "yyl_" 开头并且都是 ".txt" 格式。现在我们需要把它们的名称全部修改为 "yyll_" 开头,同时保留其 ".txt" 的格式。下面是进行这项任务的具体步骤: 1. 进入需要操作的目录:我们可以使用命令 cd xxx 来进入我们需要操作的文件夹。例如我们需要进入名为“myfiles”的文件夹,就可以使用命令 cd myfiles。 2. 使用 ls 命令查看文件:在进入文件夹后,我们可以使用 ls 命令来查看当前目录下的所有文件,确认我们需要更改的文件是否已经存在。 3. 批量修改文件名:我们可以通过以下的命令来进行文件名的更改: ``` for filename in yyl_*.txt do mv "$filename" "${filename/yyl_/yyll_}" done ``` 其中,for in 循环语句用于遍历符合要求的文件,mv 命令用于重命名文件。此处我们使用了 bash 的变量替换功能,将旧名称 yyl_ 替换为新名称 yyll_。 这就是用 shell 批量修改文件名的基本过程,我们可以通过修改上述命令的通配符和变量替换语句来应对不同的文件类型和更改要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值