Chinaunix

标题: 怎么取目录下所有*.txt????? [打印本页]

作者: chen_chen1212    时间: 2010-06-17 14:39
标题: 怎么取目录下所有*.txt?????
怎么取目录下所有*.txt的文件名字,然后去掉路径和后缀只取文件名,然后更改文件名字
作者: Shell_HAT    时间: 2010-06-17 14:49
更改成什么样子?
作者: bbgg1983    时间: 2010-06-17 14:49
  1. 哇,,潜水王的处女贴丫
复制代码

作者: iori809    时间: 2010-06-17 14:52
能坚持4年才发帖~。。。。。。。。。。。厉害。
作者: chen_chen1212    时间: 2010-06-17 14:55
回复 2# Shell_HAT


    就是先取文件的名字,去掉后缀去掉路径,然后改成.log的后最
作者: where27    时间: 2010-06-17 15:03
for i in `ls *.txt`
do
mv $i ${i%%.*}.log
done
这样?
作者: ly5066113    时间: 2010-06-17 15:03
rename '.txt' '.log' *.txt
作者: Shell_HAT    时间: 2010-06-17 15:03

  1. rename 's/\.txt$/\.log/' *.txt
复制代码

作者: chen_chen1212    时间: 2010-06-17 15:06
回复 6# where27


    怎么先取出去掉后缀的文件名啊,这个文件名我要用一次,然后再改文件的后缀
作者: where27    时间: 2010-06-17 15:15
回复 9# chen_chen1212


    取出是打印出来?
作者: chen_chen1212    时间: 2010-06-17 15:16
回复 10# where27


    要把这个文件名存入数据库里面
作者: 昭襄王    时间: 2010-06-17 15:20
basename
作者: Shell_HAT    时间: 2010-06-17 15:24
回复 11# chen_chen1212


Oracle?MySQL?
作者: chen_chen1212    时间: 2010-06-17 15:24
回复 13# Shell_HAT


    Oracle
作者: where27    时间: 2010-06-17 15:25
回复 11# chen_chen1212


    。。。。晕死,你也不说清楚,不知道怎么存数据库里面去,可以先ls *.txt >txtfile把文件名保存到txtfile中
作者: chen_chen1212    时间: 2010-06-17 15:29
回复 15# where27


    存数据库另外想办法,我现在不知道怎么取一个文件名字出来,怎么循环取出到一个变量里面去
作者: 昭襄王    时间: 2010-06-17 15:37
  1. flog=`date "+%Y%m%d%H%M%S"`
  2. for fname in `ls *.txt`
  3. do
  4. basename  $fname .txt >>$flog
  5. done
复制代码

作者: chen_chen1212    时间: 2010-06-17 15:42
回复 17# 昭襄王


    提示ls *.txt没有这个目录,怎么输出文件名看看
作者: 昭襄王    时间: 2010-06-17 15:44
  1. ~/srclip$ ls *.txt
  2. 001.txt  1.txt  3.txt           maobian.txt  test.txt
  3. 01.txt   2.txt  cdwhileerr.txt  tabs.txt
复制代码
晕了
作者: 昭襄王    时间: 2010-06-17 15:48
~/srclip$ ./basename.sh

001
01
1
2
3
cdwhileerr
maobian
tabs
test
作者: chen_chen1212    时间: 2010-06-17 15:51
还是不行,我的是solaris  ls *.txt 报错
作者: Shell_HAT    时间: 2010-06-17 16:10
回复 21# chen_chen1212


ls结果贴出来看看
uname -a结果贴出来看看
作者: chen_chen1212    时间: 2010-06-17 16:22
替换成这样了
flog=`date "+%Y%m%d%H%M%S"`
for fname in `find ~ -name *.txt`
#for fname in `ls *.txt`

do
basename  $fname .txt >>$flog
print $fname
done

但是print不能用
ls *.txt
提示*.txt: No such file or directory
作者: Shell_HAT    时间: 2010-06-17 16:34
回复 23# chen_chen1212


把ls的结果贴出来看看,不是ls *.txt的结果,OK?
作者: chen_chen1212    时间: 2010-06-17 16:39
我就是ls *.txt
怎么输出这个循环里面的文件名啊
作者: BangBull    时间: 2010-06-17 16:40
这样撒 ,
  1. for i in `find /dir -name "*.txt"`;do mv $i  ${i%%.*};done
复制代码

作者: BangBull    时间: 2010-06-17 16:43
  牛人哪,四年半了还记着这个ID和密码 , 要么就是QQ , email , 淘宝 , 农行卡 , 建行卡 , 花旗卡 都是同一个密码
作者: chen_chen1212    时间: 2010-06-17 16:44
这样撒 ,
BangBull 发表于 2010-06-17 16:40



    怎么把文件名存到一个变量里面  然后输出到屏幕啊
作者: yazi0127    时间: 2010-06-17 16:47
  1. a=`ls *.txt`
复制代码
如果是C shell,
  1. set a=`ls *.txt`
复制代码

作者: Shell_HAT    时间: 2010-06-17 16:48
回复 25# chen_chen1212


系统明明已经告诉你*.txt: No such file or directory
干吗非得坚持ls *.txt
忒纠结了
作者: chen_chen1212    时间: 2010-06-17 16:53
上面说用 ls *.txt
现在换成find了
怎么在循环中输出文件名到屏幕啊
作者: BangBull    时间: 2010-06-17 17:07
  1. for i in `find /dir -name "*.txt"`;do echo ${i%%.*}; mv $i  ${i%%.*};done
复制代码
那就这样撒 ... ...
作者: chen_chen1212    时间: 2010-06-17 17:24
去掉路径 去掉后缀 只要文件名呢
作者: BangBull    时间: 2010-06-17 17:28
本帖最后由 BangBull 于 2010-06-17 17:34 编辑
  1. for i in `find /dir -name "*.txt"`;do echo `basename ${i%%.*}`;done
复制代码
  难道你要故意搞火此贴
作者: crowsy001    时间: 2010-06-18 12:43
bbgg1983 发表于 2010-06-17 14:49



    眼光犀利; 佩服
作者: leoflash    时间: 2010-06-18 14:40
学习学习!!!!
作者: tomdriver    时间: 2010-06-18 17:45
呵呵,处女贴 ,居然被这么个问题给破了。可惜啊。
作者: valshen    时间: 2010-06-18 17:48
呵呵,处女贴,顶一个,
作者: ziyiu123    时间: 2010-06-18 17:48
我是来看我的注册时间的。
作者: ziyiu123    时间: 2010-06-18 17:53
很恐怖 ,老汉已经注册6年了。。。。

时间不等人啊。
作者: 昭襄王    时间: 2010-06-18 17:54
老大,看贴啊,怎么循环也有了,怎么输出也有了,怎么去掉后缀也有了,你怎么不看回贴啊
$ basename vlc_1\:1.2.0-git20100609-0.0ubuntu2-1_i386.deb .deb
vlc_1:1.2.0-git20100609-0.0ubuntu2-1_i386
这样行不?sun不会没有basename吧。。。那你正则吧
作者: ziyiu123    时间: 2010-06-18 17:56
楼下的是天才。
作者: slackware12    时间: 2010-06-19 00:02
本帖最后由 slackware12 于 2010-06-19 00:04 编辑

for pathname in *.txt
do
    filename="$(basename "$pathname" '.txt')"
    修改文件名 "$filename"
done
作者: slackware12    时间: 2010-06-19 00:47
本帖最后由 slackware12 于 2010-06-19 00:48 编辑

fadfsdf
作者: huowz    时间: 2010-06-19 07:15
我也看看注册时间。
作者: buzzle    时间: 2010-06-19 10:10
for  i in `ls *.txt`
do
name=`echo $i |sed  's/\.txt$//'`
mv $i $name
done
作者: chinesedragon    时间: 2010-06-19 13:54
看来Shell真的很强大
作者: wmy0308    时间: 2010-06-19 17:21

作者: BangBull    时间: 2010-06-19 17:46
我是来看我的积分是,看赌球是不是瀛了
作者: leoflash    时间: 2010-06-21 09:05

作者: wstar    时间: 2010-06-21 15:24
路过。
作者: rilee    时间: 2010-06-21 15:25
楼主要看回帖啊,怎么一直问啊?
作者: xiaocongwjb123    时间: 2010-06-21 17:59
标题: 开始没有看清楚,修改一下
本帖最后由 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

     你只需要对上面的脚本做一些修改后就可以使用了。
作者: gxj241040128    时间: 2010-06-22 09:16
find dirname -name "*.txt" | awk -F\/ '{print $NF}' | sed "s/\.txt//g"
取名

find dirname -name "*.txt" | awk -F\/ '{print $NF}' | sed "s/\.txt/\.log/g"
修改
作者: dglwx    时间: 2010-06-22 09:21
看注册时间来的!
作者: blackold    时间: 2010-06-22 09:23
能坚持4年才发帖~。。。。。。。。。。。厉害。
iori809 发表于 2010-06-17 14:52



    shell才子啊,好好利用,要不可惜了。
作者: wyihua    时间: 2010-06-22 09:55
看看注册时间
作者: honckly    时间: 2010-06-22 10:18
取出文件名,还是内容?
作者: leoflash    时间: 2010-06-22 11:31
{:3_198:}{:3_198:}{:3_198:}
作者: s13d    时间: 2010-06-22 15:21
更改成什么样子?
作者: sky-鹏    时间: 2010-06-22 20:12
进来学习,顺便看看时间
作者: wild_li    时间: 2010-06-23 09:09
那我看下我的注册时间是多少..
作者: saintdragon    时间: 2010-06-23 09:50
火帖,偶也来留名并学习
作者: renxiao2003    时间: 2010-06-24 12:55
怎么取目录下所有*.txt的文件名字,然后去掉路径和后缀只取文件名,然后更改文件名字
chen_chen1212 发表于 2010-06-17 14:39



    用DOS还是BASH啊。
作者: s13d    时间: 2010-06-24 15:48
safafasfasfasfasfasfaasfa
热敏纸
收银纸
作者: nhuczp    时间: 2010-06-24 19:40
这兄弟比较猛,潜水四年发一次贴!!
作者: s13d    时间: 2010-06-28 14:21
asdasdsa热敏纸
收银纸
作者: s13d    时间: 2010-06-29 14:49
AD阿达说的撒大叔大叔
作者: s13d    时间: 2010-06-29 14:49
AD
AD
AD
AD
AD
AD
作者: s13d    时间: 2010-06-29 14:50
AD
AD
AD
AD
AD
AD




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2