Bash 如果匹配的文件与特定的目标文件夹名称匹配,则移动文件夹中的匹配文件
如果文件夹名称的某个部分匹配,我无法确定如何将文件移动到文件夹中 例如,如果我有4个文件,下面的bash将使用特定的文件扩展名并为其创建文件夹: BashBash 如果匹配的文件与特定的目标文件夹名称匹配,则移动文件夹中的匹配文件,bash,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之前: IonXpr
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
:
`Folder` `File`
IonXpress_001 >>> IonXpress_001.bam
IonXpress_002 >>> IonXpress_002.bam
IonXpress_003 >>> IonXpress_003.bam
IonXpress_007 >>> IonXpress_007.bam
在文件夹中
有一个名为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
我正在尝试将测试文件夹
中与起始字符串匹配的文件
移动到主文件夹中。测试文件夹
也作为子目录移动,其中包含文件
。我为这篇冗长的文章试图提供所有细节而道歉。谢谢:)
期望的结果
`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
编辑
`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
您可以按如下方式修改现有脚本:
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
会自动退出。现在什么是test
文件夹的完整路径?@anubhava完整路径是/home/cmccabe/Desktop/NGS/API/2-19-2016/test
。。。。谢谢:)。你可以发布问题中所有内容的完整路径吗?我真的不知道哪些文件/文件夹要放在哪里。如果除了测试(测试、名称、计数、结果、更少)之外还有多个子文件夹,所有子文件夹都在同一路径中,是否可以全部使用`mkdir-p{“$base”,“$base/test/name/count/result/less”}或者有更好的方法吗?谢谢:)。使用:mkdir-p“$base”;mkdir-p“$base/”(test,name,count,result,less}
我用bash添加了一个编辑,但是我得到mv:cannot stat'picard/fastqc/bedtools/30x/*”:没有这样的文件或目录
…谢谢:).这就是你的问题所显示的picard/fastqc/bedtools/30x>>>
如果不附上屏幕截图,很难解释,但每个子目录都有文件。感谢您的帮助,我将尝试使用一些代码示例,如果遇到问题,请重新发布。谢谢:)。