如果文件夹名称的匹配部分匹配,则无法计算如何将文件移动到文件夹中。
例如,如果我有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都在其中:
`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也被移动为一个带有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发布于 2016-03-07 15:44:58
您可以像这样修改现有脚本:
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将悄悄退出。
https://stackoverflow.com/questions/35847726
复制相似问题