如果匹配特定目标文件夹名称,则移动文件夹中的匹配文件

时间:2016-03-07 15:36:21

标签: bash

如果文件夹名称的匹配部分,我无法弄清楚如何将文件移动到文件夹。

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

Bash

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运行之前:

IonXpress_001.bam
IonXpress_002.bam
IonXpress_003.bam
IonXpress_007.bam

运行bash

创建了4个文件夹,其中包含.bam个:{/ p>

 `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个文件:

 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移动到主文件夹中。 test folder也会作为子目录移动,其中包含file。我为那些只是试图提供所有细节的长篇文章道歉。谢谢你:)。

期望的结果

   `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

修改

 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

1 个答案:

答案 0 :(得分:1)

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

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将以静默方式退出。