假设我想从具有这些文件夹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
。我以为在这个命令中应用cp
和mv
不会有任何不同,但我错了。事实上,我需要同时使用mv
和cp
来完成不同的任务,所以我求助于使用循环
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 ;