私はMainDirectory/hundreds_of_subdirectories/thousands_of_fastas
構造を持っています。基本となる各ファスタ(生物情報ファイル形式)について、ファイルの特定の部分のみを維持するために、ファイル名とファイルの最初の行を変更してみました。
したがって、次のテキストはファイル名とファイル名を構成します。
947-length-1150-cov-1000|contig:JAECWU010000213.1|slice:817050-818200|uce:uce-1452|match:817550-817700|orient:{'+'}|probes:4.unaligned.fasta
になる:
uce-1452.unaligned.fasta
私が試したファイルの最初の行を編集するには
sed '1 s/^[^|uce-]*(|uce-[0-9]).*/\1/' hundreds_of_subdirectories/*
しかし、チケットではありません...
その後、ある種のループを混乱させる...
for i in *\*.unaligned.fasta; do sed -E 's/^[^|uce-]*(|uce-[0-9]).*/\1/'; done
ファイル名の場合はrename
代わりに使用することをお勧めsed
しますがsed
、次のことを試しました。
for x in hundreds_of_subdirectories/thousands_of_fastas*unaligned.fasta; do
echo $x | sed -r 's/^[^|uce-]*(|uce-[0-9]).*/mv' -v "\0" "|uce-[0-9].*/\1/.unaligned.fasta"/
done
私は木に向かって吠えましたか?ありがとうございます!
ベストアンサー1
find
Perlユーティリティを使用してrename
使用できます。
find MainDirectory -type f -name '*.unaligned.fasta' \
-exec rename -v -d 's/.*:(uce-\d+).*/$1.unaligned.fasta/' {} +
これは各パスのファイル名部分(options -d
)のみを変更し、ターゲットファイル名がすでに存在する場合はファイル名を変更しないでください。-v
詳細でない出力のオプションを削除します。