2017-02-04 9 views
2

bashを使用して、特定のパターンに一致するディレクトリ内のすべてのファイルを.txtに名前変更しようとしています。以下の2つの試みは、ディレクトリからファイルを削除し、エラーを投げた。ありがとう:)ディレクトリ内の特定の種類のすべてのファイルの名前を変更します。

入力

16-0000_File-A_variant_strandbias_readcount.vcf.hg19_multianno_dbremoved_removed_final_index_inheritence_import.txt 
16-0002_File-B_variant_strandbias_readcount.vcf.hg19_multianno_dbremoved_removed_final_index_inheritence_import.txt 

所望の出力

16-0000_File-A_multianno.txt 
16-0002_File-B_multianno.txt 

バッシュの試み1 this removes the files from the directory

for f in /home/cmccabe/Desktop/test/vcf/overall/annovar/*_classify.txt ; do 
# Grab file prefix. 
p=${f%%_*_} 
bname=`basename $f` 
pref=${bname%%.txt} 
mv "$f" ${p}_multianno.txt 
done 

バッシュの試み2を

for f in /home/cmccabe/Desktop/test/vcf/overall/annovar/*_classify.txt ; do 
# Grab file prefix. 
p=${f%%_*_} 
bname=`basename $f` 
pref=${bname%%.txt} 
rename -n 's/^$f/' *${p}_multianno.txt 
done 

答えて

3

ループは必要ありません。

rename -n 's/(.*?_[^_]+).*/${1}_multianno.txt/g' /home/cmccabe/Desktop/test/vcf/overall/annovar/*_classify.txt 

正規表現の意味は大体ある

、残り は第二_、 が一致するまで、最初からすべてのものをキャプチャし、 をして撮影した接頭辞で置き換えると_multianno.txtを追加します。 renameだけでこれを行うことができます

フラグ-nフラグを指定すると、実際にコマンドを実行しなくても、このコマンドが出力します。 出力がよく見える場合は、-nを削除して再実行してください。

+1

大変お手伝いいただきありがとうございます。私はそれらに感謝します:) – Chris

関連する問題