「.fasta」で終わる特定の単語を含むファイルをどのように選択して変更できますか?
たとえば、「car」という単語を含むファイルを選択します。
find /home/user -name "*car*"
これは私に与える
/home/user/car.txt
/home/user/scar.fa
/home/user/cart.fa
/home/user/scart.fasta
ところで、どのように変えるか分からないので、みんな「.fasta」で終わりますね。
だから最終結果は
/home/user/car.fasta
/home/user/scar.fasta
/home/user/cart.fasta
/home/user/scart.fasta
答え1
オプションでasコマンドを使用することをお勧めしますrename
。-exec
find
find /home/user -name "*car*" -exec rename 's/[^.]*$/fasta/' {} \;
[^.]*$
ファイル名の末尾に点以外のすべての項目を一致させ、fasta
拡張子に置き換えます。
命令がわからない場合は確認してくださいman rename
。
答え2
Bashソリューションについては、この概要を参照してください。部分文字列の削除。
#!/bin/bash
for f in *car*; do
[[ ${f##*.} == "fasta" ]] && continue
f_no_ext="${f%%.*}"
if [[ -e "${f_no_ext}.fasta" ]]; then
echo "Not moving $f because it would clobber ${f_no_ext}.fasta"
continue
fi
mv "$f" "${f_no_ext}.fasta"
done
exit
その後、すべてのファイルを繰り返し*car*
て名前を.fasta拡張子に変更し、すでに.fastaで終わっているファイルはスキップします。他の解決策はこのステップを無視することができると思います。
if
編集:ファイルの上書きを防ぐために、拡張子が.fastaのファイルがすでに存在することを確認するブロックを追加しました。たとえば、car.txtとcar.fastaがあるとします。
答え3
ループとコマンドを使用するmv
別の方法:
find /home/user -type f -name "*car*" | while read f; do mv -v "$f" "${f%.*}.fasta"; done