2016-05-09 2 views
0

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 

所望resuult

IonXpress_004.vcf.gz 

現在の結果(ファイル名の反復における拡張子)

TSVC_variants_IonXpress_004.vcf.gz.vcf.gz 

Iは、最後まで*を移動すると/_variants_/と同じ結果を使用することを試みました。ありがとうございました :)。

+0

投稿したコードは、完全なファイル名からディレクトリ部分を削除していない可能性があります。 – tripleee

+0

@chris: 'TSVC_variants_'定数はここにありますか? – sjsam

答えて

4

${var%%*foo}は、varの値の最後からfooで終わる文字列を削除します。一致する接尾辞がない場合、何も削除されません。私はあなたがfooまで、最初から調整する${var##*foo}を推測しています。ディレクトリパスを削除する場合は、そのディレクトリパスを別途追加する必要があります。

mv -- "$file" "/home/cmccabe/Desktop/NGS/API/test/${file##*_variants_}" 
1
find . -type f -name "*.vcf.gz" -exec bash -c 'var="$1";mv $var ${var/TSVC_variants_/}' _ {} \; 

はあなたのために仕事をすることがあります。

+0

ありがとうございました....素晴らしい作品:)。 – Chris

関連する問題