首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果匹配的文件与特定的目标文件夹名称匹配,则将其移动到文件夹中。

如果匹配的文件与特定的目标文件夹名称匹配,则将其移动到文件夹中。
EN

Stack Overflow用户
提问于 2016-03-07 15:36:21
回答 1查看 401关注 0票数 2

如果文件夹名称的匹配部分匹配,则无法计算如何将文件移动到文件夹中。

例如,如果我有4个文件,下面的bash将使用特定的文件扩展名并为以下文件创建一个文件夹:

Bash

代码语言:javascript
复制
for f in /home/cmccabe/Desktop/NGS/API/2-19-2016/*.bam
do
   [ -d "$f" ] && continue
   base=${f%.*}
   mkdir -p "$base"
   mv "$f" "$base/"
done

在运行bash之前:

代码语言:javascript
复制
IonXpress_001.bam
IonXpress_002.bam
IonXpress_003.bam
IonXpress_007.bam

在运行bash之后

创建了4个文件夹,每个.bam都在其中:

代码语言:javascript
复制
 `Folder`            `File`
IonXpress_001 >>> IonXpress_001.bam
IonXpress_002 >>> IonXpress_002.bam
IonXpress_003 >>> IonXpress_003.bam
IonXpress_007 >>> IonXpress_007.bam

folder中有一个名为test的目录,其中包含4个文件:

代码语言:javascript
复制
 IonXpress_001_newheader_all_IDT.meterics
 IonXpress_002_newheader_all_IDT.meterics
 IonXpress_003_newheader_all_IDT.meterics
 IonXpress_007_newheader_all_IDT.meterics

我正在尝试将与开始字符串匹配的file移动到主文件夹中。test folder也被移动为一个带有file的子目录。我为这篇宽容的帖子道歉,我只是想提供所有细节。谢谢:)。

期望结果

代码语言:javascript
复制
   `Folder`            `File`           `folder`
IonXpress_001 >>> IonXpress_001.bam   >>> test >>> IonXpress_001_newheader_all_IDT.meterics
IonXpress_002 >>> IonXpress_002.bam   >>> test >>> IonXpress_002_newheader_all_IDT.meterics
IonXpress_003 >>> IonXpress_003.bam   >>> test >>> IonXpress_003_newheader_all_IDT.meterics   
IonXpress_007 >>> IonXpress_007.bam   >>> test >>> IonXpress_007_newheader_all_IDT.meterics

编辑

代码语言:javascript
复制
 for f in /home/cmccabe/Desktop/NGS/API/2-19-2016/*.bam
do
 base="${f%.*}"
 mkdir -p "$base"; mkdir -p "$base/"(picard,fastqc,bedtools,30x}
 mv "$f" "$base/"
 mv "picard/fastqc/bedtools/30x/$f"* "$base/picard/fastqc/bedtools/30x"
done

 `Folder`            `File`           `folder`
IonXpress_001 >>> IonXpress_001.bam   >>> picard/fastqc/bedtools/30x >>> IonXpress_001_newheader_all_IDT.meterics
IonXpress_002 >>> IonXpress_002.bam   >>> picard/fastqc/bedtools/30x >>> IonXpress_002_newheader_all_IDT.meterics
IonXpress_003 >>> IonXpress_003.bam   >>> picard/fastqc/bedtools/30x >>> IonXpress_003_newheader_all_IDT.meterics   
IonXpress_007 >>> IonXpress_007.bam   >>> picard/fastqc/bedtools/30x >>> IonXpress_007_newheader_all_IDT.meterics
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 15:44:58

您可以像这样修改现有脚本:

代码语言:javascript
复制
sub='picard/fastqc/bedtools/30x'

for f in /home/cmccabe/Desktop/NGS/API/2-19-2016/*.bam
do
   base="${f%.*}"
   mkdir -p {"$base","$base/$sub"}

   mv "$f" "$base/"
   mv "$sub/$f"* "$base/$sub/"
done

如果目标目录已经存在,mkdir -p将悄悄退出。

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

https://stackoverflow.com/questions/35847726

复制
相关文章

相似问题

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