如何复制文件夹列表以保持父目录的部分文件夹结构

How to copy list of folders keeping the partial folder structure that of parent directory

假设我想从 find /40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD -name "plink_data*" 复制一些文件夹,其中有这些文件夹:

/40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD/ADGC_NHW/ADNI/TOPMEDr2/vcffile/plink_data
/40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD/ADGC_ASIAN/BIOCARD/TOPMEDr2/vcffile/plink_data

进入/40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD/NEW_DIR/,但我希望新目录具有:

/40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD/NEW_DIR/ADGC_NHW/ADNI/TOPMEDr2/vcffile/plink_data
/40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD/NEW_DIR/ADGC_ASIAN/BIOCARD/TOPMEDr2/vcffile/plink_data

我试过了,但它复制了整个路径:find /40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD -name "plink_data*" -exec cp --parents {} /target \;

我该怎么做?谢谢!

更新:我能够使用@Cyrus 的回答使用cp 执行我的任务,但不能使用mv。我认为在此命令中应用 cpmv 不会有任何不同,但我错了。事实上,我需要同时使用 mvcp 来完成不同的任务,所以我求助于使用循环

for line in $(find . -name "*plink_data*"); do
    new_FOLD="$(echo  $line| cut -d"." -f2-)"
    mkdir -p "NEW_DIR/${new_FOLD}"
    cp/mv $line "NEW_DIR/${new_FOLD}"
done

我建议:

cd /40/AD/GWAS_data/Source_Plink/2021_ADGC_EOAD
mkdir -p NEW_DIR
find . -name "plink_data" -not -path "./NEW_DIR/*" -exec cp --parent {} NEW_DIR \;