如果文件夹名称的匹配部分,我无法弄清楚如何将文件移动到文件夹。
例如,如果我有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
答案 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
将以静默方式退出。