【发布时间】:2018-09-06 10:12:30
【问题描述】:
我一直在使用循环将数据从外部组复制到我的工作目录,将文件夹名称附加到文件名的开头。 for 循环基于这个先前的问题。 Append part of folder name to all .gz within
自从我提出这个问题以来,外部小组简化了他们的文件夹结构,但现在在一些文件夹名称中添加了“(2)”(我无法影响小组命名他们文件的方式,这是一个巨大的公司)。空间打破了我的循环,我需要帮助修复它。
外部组的文件结构
Samples/SampleName1/Files/SampleID1_uniqueNumber.gz
Samples/SampleName2/Files/SampleID2_uniqueNumber.gz
Samples/SampleName3/Files/SampleID3_uniqueNumber.gz
Samples/SampleName3 (2)/Files/SampleID3_uniqueNumber.gz
我想要的目标文件夹中的内容(所有样本都移动到单个目标)
SampleName1.SampleID1_uniqueNumber.gz
SampleName2.SampleID2_uniqueNumber.gz
SampleName3.SampleID3_uniqueNumber.gz
SampleName3.SampleID3_uniqueNumber.gz
我当前的 for 循环可以正确复制除最后一个样本之外的所有内容。 uniqueNumber 应该足够唯一以防止 2 SampleName3 相互覆盖。
for f in ../pathToData/Samples/*/Files/*.gz;
do s=${f##../pathToData/Samples/};
s=${s%%/*};
cp $f "/destinationFolder/"$s"."${f##*Files/};
done
如何转义空格,以便 cp 将“(2)”视为原始文件名的一部分,而不是将“(2)”视为目标文件夹?
【问题讨论】: