迭代复制文件夹内的文件 - Bash

迭代复制文件夹内的文件 - Bash

我想将文件夹内的所有文件复制dmir.bedpostX到其他位置,保留结构。

   Bedpost_Controls

   └───C01
   │   └─── dmri.bedpostX
   │       └─── *files*
   └───C02
   │   └─── dmri.bedpostX
   │       └─── *files* 
   └───C03
   │   └─── dmri.bedpostX
   │       └─── *files*


   Bedpost_Patients

   └───H01
   │   └─── dmri.bedpostX
   │       └─── *files*

因此,在我的新目录中,我将拥有上面看到的文件夹分布。问题是,C01, C02文件夹等里面还有其他我不想复制的文件。

这就是我所拥有的:

#!/bin/bash
DIR="/media/HD_2/mark/Analysis"
for group in Controls Patients; do 
    cd "$DIR/Bedpost_${group}" || exit
    for folder in *; do
        orig="$folder/dmri.bedpostX"
        dest="/media/HD_2/roy/Analysis/Bedpost_${group}/$orig"; 
        mkdir -p $dest
        cp "$orig/*" "$dest/"
    done;
done;

这将复制目录,但无法识别全局变量:

cp: cannot stat '/H47_1/dmri.bedpostX/*': No such file or directory

我尝试将有"和没有两种情况都进行整合。

编辑:我尝试使用命令仅复制一个文件,cp "$orig/nodif_brain_mask.nii.gz" "$dest/"但出现错误:

cp: cannot stat '/C01_1/dmri.bedpostX/nodif_brain_mask.nii.gz': No such file or directory

这是怎么回事? 同样的脚本以前可以用于不同的文件。

答案1

如果您不受 bash 的限制,我会看看 rsync,您可以使用模式匹配排除某些文件[https://www.howtogeek.com/168009/how-to-exclude-files-from-rsync/]。

至于你的 Bash 脚本问题,

orig="$folder/dmri.bedpostX" - $folder 是绝对路径 (以 / 开头),您是否想在其前面加上 $DIR/ ?

相关内容