首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提取每个文件位于单独子文件夹中的数千个文件?

如何提取每个文件位于单独子文件夹中的数千个文件?
EN

Unix & Linux用户
提问于 2019-07-07 08:16:14
回答 1查看 429关注 0票数 0

我有一个文件夹,里面有三千名受试者的影像数据。每个主题的文件夹中都有许多其他文件夹。我想使用一个循环从每个子文件夹中提取一个文件,并将它们移到另一个目录中,并根据病人ID重命名它们。例如,/imaging/data/ 1100232 /free surfer/MRI/lh_ribbon.mgz,这里为每个病人更改了1100232个文件夹名,并且有3000个病人/文件夹。我想提取每个病人的lh_ribbon.mgz文件,并根据病人iD重命名这个文件。我对Linux很陌生,有人能帮忙吗?谢谢

EN

回答 1

Unix & Linux用户

发布于 2019-07-14 10:03:48

由于您是新来的,我们将逐步构建此解决方案。

一个find来定位/imaging/中的所有文件

代码语言:javascript
复制
find /imaging/ -iname *.mgz

为找到的每个文件添加一个-exec \;以执行一个命令(我们将从echo开始)一次(文件名由{}表示)

代码语言:javascript
复制
find /imaging/ -iname *.mgz -exec echo {} \;

使用sh -c允许-exec中更复杂的脚本,而不仅仅是简单的命令,传递目标目录和文件名为$1和$2

代码语言:javascript
复制
find /imaging/ -iname *.mgz -exec sh -c 'echo $1 $2' sh {} "/path/to/store/patient/files/" \; 2>/dev/null

最后,将新文件名从第三个目录下的病人ID向上组合,并使用新的病人ID作为文件名,从旧位置复制到新的文件名。

代码语言:javascript
复制
find /imaging/ -iname *.mgz -exec sh -c 'p=${1#/*/*/}; p=${p%%/*}; echo cp $1 $2$p.mgz' sh {} "/path/to/store/patient/files/" \; 2>/dev/null

请注意。我将cp命令保留为echo,这样您就可以运行它,并在提交之前确保输出是正确的。如果一切正常,那么只需删除echo,然后运行它。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/528764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档