Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如果匹配的文件与特定的目标文件夹名称匹配,则移动文件夹中的匹配文件_Bash - Fatal编程技术网

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

Bash 如果匹配的文件与特定的目标文件夹名称匹配,则移动文件夹中的匹配文件,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

如果文件夹名称的某个部分匹配,我无法确定如何将文件移动到文件夹中

例如,如果我有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
文件夹中
有一个名为
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>>>
如果不附上屏幕截图,很难解释,但每个子目录都有文件。感谢您的帮助,我将尝试使用一些代码示例,如果遇到问题,请重新发布。谢谢:)。