问一个关于find的用法

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
Tenyears
帖子: 2245
注册时间: 2005-06-30 15:46
来自: 成都
送出感谢: 0
接收感谢: 0

问一个关于find的用法

#1

帖子 Tenyears » 2008-02-18 17:24

我想用一行find命令来处理一批文件,比如这样将所有文件名前面加一个字符
find . -iname "*mp3" -execdir mv {} A{} \;
但我发现find中“{}”的表示的是“./xx.mp3”而不是我想要的“xx.mp3”,所以命令出错了。怎么得到我想要的东西?

ps.我知道改名字有其他方法,我想问问find的用法,谢谢。
Humanity to others // 己所不欲,勿施与人
Laptop: ThinkPad X220 --- Win7 Home / Ubuntu 12.04
Desktop: Win7/Ubuntu 12.04
Server: Ubuntu12.04
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#2

帖子 eexpress » 2008-02-19 1:46

自己basename就是。|while read i; do echo `basename $i`; done
execdir?
● 鸣学
头像
Tenyears
帖子: 2245
注册时间: 2005-06-30 15:46
来自: 成都
送出感谢: 0
接收感谢: 0

#3

帖子 Tenyears » 2008-02-19 15:57

ee总是简洁明了,有的时候不足以解决问题阿。用你的法子,我写成了这样
find . -iname "*.mp3" |while read i; do mv $i ./A`basename $i`; done
但是,只能处理当前路径,不能处理子路径,而-execdir就是起到这个作用,如何改进?

xiechy,你的法子也不行,-printf '%f'只能在前面输出一个XX.mp3,后面的{}还是指示./XX.mp3
Humanity to others // 己所不欲,勿施与人
Laptop: ThinkPad X220 --- Win7 Home / Ubuntu 12.04
Desktop: Win7/Ubuntu 12.04
Server: Ubuntu12.04
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#4

帖子 eexpress » 2008-02-19 20:24

我的意思,只是说。管道以后,就是shell。随便怎么搞都行啊。呵呵。
处理路径,自己用dirname处理,进入目录就是。
因为我只会shell,也因为我不会execdir。
:lol:
● 鸣学
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京
送出感谢: 0
接收感谢: 2 次

#5

帖子 aBiNg » 2008-02-19 20:49

代码: 全选

aBiNg:~/incoming ¶ find . -iname "*.mp3" 
./test/b.mp3
./a.mp3
aBiNg:~/incoming ¶ find . -iname "*.mp3" | while read i; do mv $i `echo $i | sed 's:\(.*\)/\(.*\)\.mp3:\1/A\2\.mp3:'`; done
aBiNg:~/incoming ¶ find . -iname "*.mp3" 
./test/Ab.mp3
./Aa.mp3
冗长。

rename对regexp的支持有限?find的{ }是搜索结果,而非-exec后命令执行结果。
头像
Tenyears
帖子: 2245
注册时间: 2005-06-30 15:46
来自: 成都
送出感谢: 0
接收感谢: 0

#6

帖子 Tenyears » 2008-02-20 15:41

确实。这个方法虽然有效,但不漂亮
Humanity to others // 己所不欲,勿施与人
Laptop: ThinkPad X220 --- Win7 Home / Ubuntu 12.04
Desktop: Win7/Ubuntu 12.04
Server: Ubuntu12.04
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#7

帖子 eexpress » 2008-02-20 17:21

还在折腾啊。你这样的需要,没通用性啊。脚本丑陋点,没关系。实现了就可以了。
find不是万能的。
● 鸣学
回复

回到 “Shell脚本”