shell 的find传参

jist12321 2008-01-31 02:43:08
在linux中,用shell要用find 找出当前包括子目录下面的文件,并把mv的到别的目录,同时原文件名前加zhou,谁可以理现?
有一个要求:不能先把原来的文件先copy成我的zhou*.zip,再是mv时直接把文件改名字了
比如 mv 1.zip ../zhou1.zip
请高人指点
...全文
308 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
x86 2008-02-02
  • 打赏
  • 举报
回复
如果有多项操作的话,用我的方式更灵活一些,无需make,直接执行就是了。
for i in `find . -name "*.pl" `; do name=`basename $i`; cp $i /tmp/test$name; done

`find . -name "*.pl" `,用反撇号执行命令,每个结果为一行
for i in ...,把刚才执行的结果当成一个数组,用for循环去遍历,之后是一个分号
在刚才的分号与最后的done之间你可以做很多事情,可以运行多条命令,命令以分号结尾,$i是数组的一项,也就是find的一条结果

对于你的要求,楼上各位说的方式也不错。
jist12321 2008-02-02
  • 打赏
  • 举报
回复
x86对不起,我结贴结分只能给第一个人解决我问题的人,但还是要谢谢,真的很喜欢x86的方法
cceczjxy 2008-01-31
  • 打赏
  • 举报
回复

find ./src -name *.zip -printf "mv %p /home/wls8/zhou/des/zhou_%f\n"

find ./src -name *.zip //查找./src目录下后缀为.zip的所有文件;
-printf "mv %p /home/wls8/zhou/des/zhou_%f\n"
//-printf 格式化输出文件信息。%p参数是文件全路径名,%f参数是只输出文件名。
-printf "mv %p /home/wls8/zhou/des/zhou_%f\n" //整体上是每找到一个文件就写一个命令
后面通过管道,把这个命令传给bash来执行。命令的格式就如
mv ./src/adf/adf.zip /home/wls8/zhou/des/zhou_adf.zip



cceczjxy 2008-01-31
  • 打赏
  • 举报
回复
find . -type f -printf "mv %p ../%h/zhou%f\n" |bash

借用2楼的想法.
jist12321 2008-01-31
  • 打赏
  • 举报
回复
在/home/wls8/zhou/src有三个文件down_01.zip down_02.zip down_03.zip
我现在要把他考到/home/wls8/zhou/des并文件名加zhou_,我用了以下命名,可是不行,请指点
当前目录是/home/wls8/zhou:
find ./src -name *.zip -printf "mv %p /home/wls8/zhou/des/zhou_%f\n"
这个忘 了写|bash,确决了,5楼的,谁可以帮我解释一下吗?
jist12321 2008-01-31
  • 打赏
  • 举报
回复
还有一个,5楼的那种法,是要用Make来运行的吗?
jist12321 2008-01-31
  • 打赏
  • 举报
回复
在/home/wls8/zhou/src有三个文件down_01.zip down_02.zip down_03.zip
我现在要把他考到/home/wls8/zhou/des并文件名加zhou_,我用了以下命名,可是不行,请指点
当前目录是/home/wls8/zhou:
find ./src -name *.zip -printf "mv %p /home/wls8/zhou/des/zhou_%f\n"
x86 2008-01-31
  • 打赏
  • 举报
回复
注意用的是反撇号,不是单引号。

[code=BatchFile]
for i in `find . -name "*.pl" `; do name=`basename $i`; cp $i /tmp/test$name; done
[/code]

cfy84 2008-01-31
  • 打赏
  • 举报
回复
是打shell命令实现还是编程实现?
yecheng_110 2008-01-31
  • 打赏
  • 举报
回复
[code=BatchFile]find . -printf "mv %p /home/yec/y/%h/zhou%f\n"|bash[/code]
上面的在IE下显示正常的
在firefox下错的
不知道CSDN怎么搞的
yecheng_110 2008-01-31
  • 打赏
  • 举报
回复
find . -printf "mv %p ../%h/zhou%f\n"|bash
不是很完善
jist12321 2008-01-31
  • 打赏
  • 举报
回复
各位高人啊,指点一下啊,在线等待啊

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧