在bash中删除文件名中的字符

时间:2016-05-09 18:17:05

标签: bash

我正在尝试从bash中的文件中删除特定字符,但未获得所需的结果。

bash

for file in /home/cmccabe/Desktop/NGS/API/test/*.vcf.gz; do
mv -- "$file" "${file%%/*_variants_}.vcf.gz"
done

文件名

TSVC_variants_IonXpress_004.vcf.gz

期望的结果

IonXpress_004.vcf.gz

当前结果(在文件名重复中延伸)

TSVC_variants_IonXpress_004.vcf.gz.vcf.gz

我试图将*移到最后并使用/_variants_/并获得相同的结果。谢谢你:)。

2 个答案:

答案 0 :(得分:4)

${var%%*foo}foo的值末尾删除以var结尾的字符串。如果没有匹配的后缀,则不会删除任何内容。我猜你希望${var##*foo}从头开始修剪,直到foo。如果你删除目录路径,你必须单独添加目录路径。

mv -- "$file" "/home/cmccabe/Desktop/NGS/API/test/${file##*_variants_}"

答案 1 :(得分:1)

 find . -type f -name "*.vcf.gz" -exec bash -c 'var="$1";mv $var ${var/TSVC_variants_/}' _ {} \;

可能会为你完成这项工作。