- 论坛徽章:
- 0
|
开始没有看清楚,修改一下
本帖最后由 xiaocongwjb123 于 2010-06-21 21:14 编辑
怎么取目录下所有*.txt的文件名字,然后去掉路径和后缀只取文件名,然后更改文件名字
chen_chen1212 发表于 2010-06-17 14:39 ![]()
楼主,过程和方法一步一步讲解给你:
(1)我们的环境:solaris 10 x86 bash
-bash-3.00# uname -a
SunOS umailtest 5.10 Generic_141445-09 i86pc i386 i86pc Solaris
-bash-3.00# bash --version
GNU bash, version 3.00.16(1)-release (i386-pc-solaris2.10)
Copyright (C) 2004 Free Software Foundation, Inc.
(2)操作系统根目录下面有test目录,test目录下面有1,2,....等子目录,
其中1,2,,,,,下面还有二级子目录
-bash-3.00# find test -name "*.txt"
test/1/1.txt
test/1/2.txt
test/2/3.txt
test/2/4.txt
test/2/5.txt
test/2/3/33.txt
test/2/3/35.txt
test/2/4/77.txt
test/2/4/78.txt
test/3/7.txt
test/4/9.txt
test/4/3/11.txt
test/4/3/12.txt
test/5/8.txt
(3)现在的任务就是要把test目录(包括test下面的子目录和相应的二级子目录等txt文件
名取出来,并重命名为log文件),操作方法如下:
1)把“/“替换成””:
-bash-3.00# find test -name "*.txt" | sed 's/\// /g'
test 1 1.txt
test 1 2.txt
test 2 3.txt
test 2 4.txt
test 2 5.txt
test 2 3 33.txt
test 2 3 35.txt
test 2 4 77.txt
test 2 4 78.txt
test 3 7.txt
test 4 9.txt
test 4 3 11.txt
test 4 3 12.txt
test 5 8.txt
2)打印每行的最后一列(得到了你要的第一个需求): 不好意思,之前没有看清楚,现在修改过来
-bash-3.00# find test -name "*.txt" | sed 's/\// /g' | awk '{print $NF}' | cut -d \. -f1
1
2
3
4
5
33
35
77
78
7
9
11
12
8
3)把txt替换成log(得到了你的第二个需求):
-bash-3.00# find test -name "*.txt" | sed 's/\// /g' | awk '{print $NF}' | sed 's/txt/log/g'
1.log
2.log
3.log
4.log
5.log
33.log
35.log
77.log
78.log
7.log
9.log
11.log
12.log
8.log
4)写成shell脚本 collect.sh
#!/bin/bash
/bin/find test -name "*.txt" | /bin/sed 's/\// /g' | /bin/awk '{print $NF}' | /bin/cut -d \. -f1 > /txt_collect.txt
/bin/find test -name "*.txt" | /bin/sed 's/\// /g' | /bin/awk '{print $NF}' | /bin/sed 's/txt/log/g' > /log_collect.txt
你只需要对上面的脚本做一些修改后就可以使用了。 |
|