
在日常生活和工作中,我们经常需要修改大量文件名。特别是在处理图片时,我们需要把一组图片的文件名按照特定规律重命名,这个时候,如果只手动一个一个地修改,那就太费时间了。那么有没有一种简单的方法可以批量修改多张图片文件名呢?答案是肯定的,下面就来介绍一种在 Linux 操作系统下的批量修改多张图片文件名的方法。
Linux 是一款非常强大的操作系统,常常被用作服务器端运行。其中,Linux 终端是管理员非常喜欢使用的一种工具。终端是命令行交互的方式,可以轻松地完成各种操作,不需要使用鼠标和图形化界面,速度十分迅速。Linux 终端中有一个非常好用的命令,叫做 mv 命令。它能够完成文件或目录的移动、重命名等操作。
下面就来介绍一下如何使用 mv 命令来批量修改多张图片文件名。假设我们有一组图片文件,它们的原始文件名都是随机的,比如:IMG_9832.jpg、IMG_9833.jpg、IMG_9834.jpg 等等。现在,我们要把这些图片的文件名改成按照时间顺序排列的文件名,比如:20230914_001.jpg、20230914_002.jpg、20230914_003.jpg 等等。那么,该怎样操作呢?下面,给出三种不同的方法。
方法一:使用 for 循环
在终端中进入存放图片的文件夹,输入以下命令:
for i in *.jpg; do echo “$i”; done
执行完毕后,会输出当前目录下所有 .jpg 后缀的文件名。这个命令是一个 for 循环,它会遍历当前目录下所有的 .jpg 文件,并将其命名为变量 i,然后输出该变量的值。
接着,我们需要对输出的变量 i 进行重命名,输入以下命令:
for i in *.jpg; do mv $i `date -r $i +”%Y%m%d”`_$(printf %03d ${i%.jpg})”.jpg”; done
执行完毕后,将会把每张图片的文件名修改成如下形式:20230914_001.jpg、20230914_002.jpg、20230914_003.jpg。
方法二:使用 basename 命令
假设,我们有一组 JPG 格式的图片,它们都是以 “image01.jpg”、”image02.jpg”、”image03.jpg” … “image50.jpg” 的形式命名的。现在,我们需要把它们的文件名分别改成 “even_01.jpg”、”even_02.jpg”、”even_03.jpg” … “even_50.jpg” 的形式。那么,该怎样操作呢?下面,给出使用 basename 命令的方法。
进入存放图片的文件夹,输入以下命令:
for i in *.jpg; do mv “$i” “`basename $i .jpg`.even.jpg”; done
执行完毕后,将会把每张图片的文件名修改成如下形式:even_01.jpg、even_02.jpg、even_03.jpg。
方法三:使用 rename 命令
rename 命令是一个强大的重命名工具,可以批量重命名指定后缀的文件。进入存放图片的文件夹,输入以下命令:
rename ‘s/\.JPG/.jpg/’ *.JPG
执行完毕后,将会把所有 .JPG 后缀的文件都改成 .jpg 后缀的文件。
通过上述三种不同的方法,我们可以轻松地批量修改多张图片文件名。每种方法在不同的情况下有不同的用途和优点,我们可以根据实际需求来选择不同的方法。同时,这些方法也可以应用在修改其他类型的文件名上。希望大家能够掌握这些技巧,让我们的操作更加便捷高效。
相关问题拓展阅读:
- linux下开发脚本搜索子目录批量更改文件名
- linux下批量修改文件名
linux下开发脚本搜索子目录批量更改文件名
格式固定的话 去掉后面6个嘛~~~在加‘.txt’~~~~
用os.poen(羡毁基‘ls’)获取各个目录下的文兄谨件名,用a表示文件名,余答a获取到你要的字符串,在加’.txt’,用b表示你要该的文件名,每读取一个重命名一个嘛~~~
前言
本文主要给大家介绍了关于Linux shell用sed批量更改文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
示例
去除特定字符
目标:将.jpg、.jpg 改为.jpg、.jpg
方法:将所有 – 替换为空
for file in `ls | grep .jpg`
do
newfile=`echo $file | sed ‘s/-//g’`
mv $file $newfile
done
这里使用sed进行标准输出的字符串替换,其通用格式如下:
stdout | sed ‘s/pattern/replace/’
上述示例中,在末缺弊尾添加g用于替换所有匹配项,而不仅仅替换之一个匹配项。
中间插入字符
目标:将 book01.txt、paper02.txt 改为 book-01.txt、paper-02.txt
方法:用分组匹配分别获取待插入位置两侧的字符串,再通过反向引用实现替换
for file in `ls | grep .txt`
do
newfile=`echo $file | sed ‘s/\(\+\)\(\+\)/\1-\2/’`
mv $file $newfile
done
分析
上述示例首先通过 ls 和 grep 命令得到待改名的文件列表,然后用 sed 命令进行字符串的替换,最后再使用 mv 命令来完成文件名的更改。
获取待改名文件列表的方法有很多,可以通过 find 命令,也可以直接给出字符串,我们将在下文中提到。
注意 for 循环后面的 ls | grep .txt,这条命令用两个反单引号括了起来,与 $(ls | grep .txt) 的作用相同,被包围的字符串会被当作命令执行,然后返回字符串结果。
文件名包含空格的解决方法
我们可以直接将文件列表写到 for 循环中,而不是通过命令来得到,例如:
for file in “file1 file2 file3”
do
…
done
可以看到 for 循环是通过空格来分割字符串,因此如果待更改的文件名中包含空格的话,就会被拆分成多个文件名,从而出错。
要解决这个问题,我们可以将 IFS(内部字段分隔符)设置为换行符 \n,这样一来,for 循环就会按行来获取变量的值,确保每次获取的确实是一个完整的文件名。
设置 IFS 变量的命令需要放在 for 循环之前:
IFS=$’\n’
for file in `ls`
do
…
done
也可以直接使用 while read 命令一次读取一行到变量 file 中:
ls | grep “*.txt” | while read file
do
…
done
使用 find 获取文件列表
之前的示例中,我们是通过 ls 命令来获取文件列表。该命令只能获取某个目录的文件,而且没法进行多种条件的筛选册消。
而一说到文件的查找,不得不提到功能强大的 find 命令。该命令可以在多个层次的目州扮知录中查找文件,并能够设定诸如创建时间、文件大小、所有者等多种条件,查找起文件来特别方便灵活。
用 find 命令来获取文件列表,再用 sed 命令配合正则表达式来修改文件名,这两个命令的结合几乎能完成所有常见的批量改名任务。
例如,将所有大于1M,且后缀为txt或jpg的文件,由形如 book_.txt、image_.jpg 的文件改名为book.txt、image.jpg,代码如下:
for file in `find . -size +1M -name “*_*.txt” -o -name “*_*.jpg”`
do
newfile=`echo $file | sed ‘s/\(\+\)_\(\+\)./\2-\1./’`
mv $file $newfile
done
你这么写是不行的,date生成的日期都一样了,文件名重复
可以通过写脚本自动一个个判罩改名,但塌冲哗是去掉分秒之后,同目录下同日团行期文件,后改的会把前面的冲掉,也是丢文件
如果你的文件名就是这样的 话 下面的小脚本可以完成 #!/bin/搏弯shcd /Test/Test1for files in `ls *`do mv $files `echo “${files:0:11}.txt”` done 这是单个文件夹的 要祥饥多个一次做完自己去弄。 可以复制基宴闷5次这个段代码 改改就好。或者 把5个文件夹目录做成一个数组 拿去遍历。
cp命令将文件复制到目录文件夹。
linux下批量修改文件名
你先试一下,看行不行
保留文件名的前5位rename ‘s/.{1,5}//’ *
删除文件名哗春运中两个特定字符森没之间的乱梁全部字符 rename ‘s/_.*_//’ *
例如你要删的文件或目录的总目录为“/home/ttt”,那么执行这条命令就能全删除链迹薯:
grep
-r
‘’
/州蚂home/ttt
|
awk
-f
‘棚者:’
$1}’
|
xargs
rm
-rf
关于linux 批量修改图片名称的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/187885.html<