免费注册 查看新帖 |

Chinaunix

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

[文件目录] 请问大神,请问linux下按照一定规则批量修改文件夹名该怎么办?谢谢!!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-08-15 16:57 |只看该作者 |倒序浏览
比如我有这些文件:
/home/yeoman/first/afjldajflfda/a.nii
/home/yeoman/first/askajdf/a.nii
/home/yeoman/first/qwwerwe/a.nii
/home/yeoman/first/jlkxcv/a.nii
/home/yeoman/first/asdfkcc/a.nii
等等类似很多文件,所有的第四级目录名称放在subject.txt里,

我想把他们统一移动并修改成:
/home/yeoman/second/sub0001/a.nii
/home/yeoman/second/sub0002/a.nii
/home/yeoman/second/sub0003/a.nii
/home/yeoman/second/sub0004/a.nii
/home/yeoman/second/sub0005/a.nii
等等。所有的第四级目录名称放在result.txt里,
我写的脚本是个死循环,运行不了。。。请问怎么解决啊,谢谢!!!

#! /bin/bash bash
rawdatadir=/home/yeoman/first
outputdir=/home/yeoman/second

hc_list=/home/yeoman/first/subject.txt
sub_list=/home/yeoman/first/result.txt

hc=$( cat ${hc_list})
subjects=$( cat ${sub_list})

while read hc subject

do
set i $hc
set j $subjects
cp ${rawdatadir}/$i/anat/*.nii.gz ${outputdir}/$j/anat
done

论坛徽章:
0
2 [报告]
发表于 2016-08-15 17:37 |只看该作者
最初的目的其实就是直接改那个文件夹的名字,把第四级文件夹统一按顺序改成sub0001到sub0005就行了。。  

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
3 [报告]
发表于 2016-08-15 21:08 |只看该作者
本帖最后由 moperyblue 于 2016-08-15 21:10 编辑

ls
  1. 1.sh  result.txt  subject.txt
复制代码
more *
  1. ::::::::::::::
  2. 1.sh
  3. ::::::::::::::
  4. #!/bin/bash

  5. rawdatadir=/home/yeoman/first
  6. outputdir=/home/yeoman/second

  7. exec 3<subject.txt 4<result.txt   #注: subject.txt 、result.txt 、1.sh 三个文件都在同一目录
  8. while read src<&3 && read dest<&4
  9. do
  10.     mv "$rawdatadir/$src" "$rawdatadir/$dest"
  11. done
  12. mv "$rawdatadir/"* "$outputdir"
  13. exec 3<&- && exec 4<&-
  14. ::::::::::::::
  15. result.txt
  16. ::::::::::::::
  17. sub0001
  18. sub0002
  19. sub0003
  20. sub0004
  21. sub0005
  22. ::::::::::::::
  23. subject.txt
  24. ::::::::::::::
  25. afjldajflfda
  26. askajdf
  27. qwwerwe
  28. jlkxcv
  29. asdfkcc
复制代码

论坛徽章:
0
4 [报告]
发表于 2016-08-16 16:32 |只看该作者
回复 3# moperyblue


   非常非常感谢!!!!!!!!!!!!!!!!!!!

论坛徽章:
13
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00每日论坛发贴之星
日期:2016-08-14 06:20:00操作系统版块每日发帖之星
日期:2016-08-14 06:20:00每日论坛发贴之星
日期:2016-08-13 06:20:00数据库技术版块每日发帖之星
日期:2016-08-13 06:20:00程序设计版块每日发帖之星
日期:2016-08-13 06:20:00IT运维版块每日发帖之星
日期:2016-08-13 06:20:00每日论坛发贴之星
日期:2016-08-12 06:20:00数据库技术版块每日发帖之星
日期:2016-08-12 06:20:00程序设计版块每日发帖之星
日期:2016-08-12 06:20:00操作系统版块每日发帖之星
日期:2016-08-12 06:20:00综合交流区版块每日发帖之星
日期:2016-08-09 06:20:00
5 [报告]
发表于 2016-08-23 21:43 |只看该作者
本帖最后由 karma303 于 2016-08-23 21:50 编辑

楼主你好,借你的帖子一用。

下面是我所理解的你的意思:
1,你只是想把first目录下的一部分目录按照subxxxx重命名,而不是所有。否则subject.txt就是多余的。
2,你的 result.txt 似乎是多余的。

以下是lua shell的解决方式。

$` tree ./home
./home
└── yeoman
    ├── first
    │   ├── afjldajflfda
    │   │   └── a.nii
    │   ├── askajdf
    │   │   └── a.nii
    │   └── qwwerwe
    │       └── a.nii
    └── second

6 directories, 3 files

$` cat ./subject.txt
afjldajflfda
askajdf
qwwerwe

$` cat ./mvdir.lua
  1. #!/bin/lsh

  2. file = io.open("subject.txt", "r")

  3. local i = 0
  4. for dirname in file:lines() do
  5.         local newname = string.format("sub%04d", i)
  6.         `mv home/yeoman/first/$(dirname)  home/yeoman/second/$(newname)
  7.         i = i + 1
  8. end
复制代码



$` ./mvdir.lua
$` tree home
home
└── yeoman
    ├── first
    └── second
        ├── sub0000
        │   └── a.nii
        ├── sub0001
        │   └── a.nii
        └── sub0002
            └── a.nii
6 directories, 3 files
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP