免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8133 | 回复: 19
打印 上一主题 下一主题

怎么用bash编程实现文件自动复制? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-19 19:36 |只看该作者 |倒序浏览
20可用积分
我想把一个文件夹中的每一个文件通过BASH编程实现自动以每一个文件名建立单个子文件夹,并把该文件移动到该子文件夹中。

例如:web文件夹中有9个文件,分别是1.doc,2.doc,3.doc……9.doc

  实现结果:web文件夹下自动建立文件夹名为1、2、3、……9的子文件夹,每个文件夹中包含相同名称的DOC文件,请问这么实现?

谢谢!

最佳答案

查看完整内容

这不会把新的文件夹计算在内。若要匹配.doc文件,可以修改$(echo *)为$(echo *.doc)。

论坛徽章:
0
2 [报告]
发表于 2007-03-19 19:36 |只看该作者
原帖由 bluespray 于 2007-3-20 22:54 发表于 9楼  



这种方式会不会把文件夹也放在新的文件夹内?这样是不是有可能陷入循环?



这不会把新的文件夹计算在内。

若要匹配.doc文件,可以修改$(echo *)为$(echo *.doc)。

论坛徽章:
0
3 [报告]
发表于 2007-03-19 20:40 |只看该作者
以每一个文件名建立单个子文件夹


这个恐怕难以实现;除非不在统一目录中。

论坛徽章:
0
4 [报告]
发表于 2007-03-20 09:49 |只看该作者
本来夏天在我就不该班门弄斧了。
很久没发言出来冒个泡。

#!/bin/sh
export PATH=$PATH:/sbin:/usr/sbin
function while_read_LINE_bottom
  {
  while read LINE
     do
        DIR=$(echo $LINE|awk -F'.' '{ print $1 }')
        mkdir $DIR
        mv $LINE ./$DIR
     done </dev/shm/tempfile
  }

cd  /var/www/你的那个文件夹
ls -l |grep ^-|awk '{ print $9 }' >/dev/shm/tempfile
while_read_LINE_bottom

[ 本帖最后由 xinyv 于 2007-3-20 11:53 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-03-20 11:24 |只看该作者
呵呵,xinyv兄言重了。

我的想法和您的类似,就是要有个文件列表,依照列表来创建目录。
不过,我要说的是在同一个目录下,目录和文件名字是不能相同的。
您在脚本中是去掉了.doc,而我以为楼主是要建立文件名字与目录名字完全相同。而1.doc只是他举例。

通过BASH编程实现自动以每一个文件名建立单个子文件夹


哈哈,我太吹毛求疵了。

论坛徽章:
0
6 [报告]
发表于 2007-03-20 11:51 |只看该作者
那我就取个巧吧。
“以每一个文件名建立单个子文件夹”

function while_read_LINE_bottom
  {
  while read LINE
     do
        mv $LINE $LINE.1
        mkdir $LINE
        mv ./$LINE.1 ./$LINE/$LINE
     done </dev/shm/tempfile
  }

[ 本帖最后由 xinyv 于 2007-3-20 11:52 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-03-20 13:54 |只看该作者
呵呵,也贴一个。
呵呵,类似的。
不过要再移动一下。



  1. #!/bin/bash
  2. for files in $(echo *)
  3. do
  4. mkdir -p  abc$$/${files}
  5. mv ${files} abc$$/${files}
  6. done
复制代码

论坛徽章:
0
8 [报告]
发表于 2007-03-20 14:26 |只看该作者
还是夏天强啊,你只移动文件n次,我却移动了2n次。
而且你比我写得少了好几行。
以后不冒泡了

论坛徽章:
0
9 [报告]
发表于 2007-03-20 15:06 |只看该作者
果然强!!!!!!!

论坛徽章:
0
10 [报告]
发表于 2007-03-20 22:54 |只看该作者
原帖由 零二年的夏天 于 2007-3-20 13:54 发表于 6楼  
呵呵,也贴一个。
呵呵,类似的。
不过要再移动一下。



#!/bin/bash
for files in $(echo *)
do
mkdir -p  abc$$/${files}
mv ${files} abc$$/${files}
done



这种方式会不会把文件夹也放在新的文件夹内?这样是不是有可能陷入循环?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP