Shell编程:批量文件名称字符替换(实现源码+注释)

某个目录下有很多类似a1.txt,a2.txt,a3.txt…..a100.txt这样的文件,编程实现将这些文件的名称中的数字替换为a[1].txt,a[2].txt…a... 某个目录下有很多类似a1.txt,a2.txt,a3.txt…..a100.txt这样的文件,编程实现将这些文件的名称中的数字替换为a[1].txt, a[2].txt…a[100].txt。 展开
 我来答
luneng8183
2016-12-12 · TA获得超过902个赞
知道小有建树答主
回答量:606
采纳率:100%
帮助的人:512万
展开全部
y:root:/tmp/file> ls -ltr
total 5
drwxr-xr-x 3 root root 640 Dec 12 11:53 ..
-rwxr-xr-x 1 root root 243 Dec 12 12:02 chgname
-rw-r--r-- 1 root root   0 Dec 12 12:02 a9.txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a88.txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a2.txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a100.txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a1.txt
drwxr-xr-x 2 root root 192 Dec 12 12:02 .
y:root:/tmp/file> ./chgname
a1.txt->a[1].txt
a100.txt->a[100].txt
a2.txt->a[2].txt
a88.txt->a[88].txt
a9.txt->a[9].txt
y:root:/tmp/file> ls -ltr
total 5
drwxr-xr-x 3 root root 640 Dec 12 11:53 ..
-rwxr-xr-x 1 root root 243 Dec 12 12:02 chgname
-rw-r--r-- 1 root root   0 Dec 12 12:02 a[9].txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a[88].txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a[2].txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a[1].txt
-rw-r--r-- 1 root root   0 Dec 12 12:02 a[100].txt
drwxr-xr-x 2 root root 208 Dec 12 12:02 .
y:root:/tmp/file> cat chgname 
#!/bin/bash

ls -1 --color=never a*.txt | awk '/^a[0-9]+\.txt$/{
    cmd="mv " $0 " \47" gensub(/^a([0-9]+)\.txt$/, "a\\[\\1\\].txt", "", $0) "\47"
    cmd | getline
    close(cmd)
    print $0 "->" gensub(/^a([0-9]+)\.txt$/, "a\\[\\1\\].txt", "", $0)
}'

 源码解释:

ls -1 --color=never a*.txt 列出所有符合条件文件然后通过管道|传输给awk

awk根据输入重组系统命令"mv a1.txt 'a[1].txt'"然后通过getline执行

命令执行完毕close(cmd)...

这个做法比较简单直接,如果使用while loop就比较麻烦一点点,如果你一定要while也是可以做到的。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式