怎么用shell脚本将文件名改名

怎么用shell脚本将文件名改名,第1张

修改文件名可以有不同的命令方式,比如rename, mv都可以实现

对于单个的文件,可以直接使用以上的命令,那如果有大量的类似格式的文件名需要修改成其他格式的,该如何呢?

比如某次测试后,保存的文件为 Lan1.txt, Lan2.txt,....Lan100.txt

这一百个文件需要在前面添加前缀变成类似 ch7_Lan1.txt,如果你还想使用mv来一个一个...多痛苦啊

当前文件夹下,文件修改有4种方式

1. 使用while Loop加 ${//}来实现Lan到 ch7_Lan的替换

点击(此处)折叠或打开

find . -name "Lan*txt" -type f | read files

do

new=${files/Lan/ch7_Lan}

mv $files $new

done

2. 充分利用 awk的分隔符功能来实现

点击(此处)折叠或打开

ls *Lan* | awk 'BEGIN{FS="Lan"OFS="ch7_Lan"}{printf "mv "$0" "$1=$1print $0}' | sh

首先,修改 FS和 OFS,输入和输出的分隔符

其次,使用 awk中的命令,拼接 “mv Lan1.txt ch7_Lan1.txt”这条命令

最后,使用|sh来执行一个 shell命令来完成 mv动作

其中,$1=$1是必须的,这个是完成 Lan===>ch7_Lan的关键(其实是可以使用 $2=$2等来替换,只要一个赋值动作而已)

奇怪的是,难道没有赋值动作,分隔符的改变就不能检测出来么??

3. 使用 awk的内置命令,gsub和 system来实现替换和命令执行

点击(此处)折叠或打开

ls "*Lan*" | awk '{org=$0gsub("Lan", "ch7_Lan")system("mv "org" "$1)}'

首先保存原始的数据

其次修改 Lan为 ch_Lan

最后执行mv动作

#/bin/bash

ls /home/user/test > txt

echo "该目录中有文件"`head -1 txt`

rm -rf txt


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11489268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存