ファイル拡張子なしでファイル名を変更する

ファイル拡張子なしでファイル名を変更する

KLLxxx( は数字を表します)という名前の一連のファイルがありますx。これらはテキスト ファイルですが、ファイル拡張子はありません。 とKLL3 桁の数字が続くファイルです。これらすべてをファイル拡張子 で終わらせたいです.fastq。たとえば、KLL123->などですKLL123.fastq

そこでこのコマンドを使ってみました

mv KLL* KLL*.fastq

しかし、次のエラー メッセージが引き続き表示されます:

mv: target 'KLL067.fastq' is not a directory

名前変更コマンド機能については知っていますが、Perl を使ったことがないので、どのようにアプローチすればよいかわかりません。これは基本的な質問だとはわかっていますが、Linux を試すのは今回が初めてです。

答え1

prename... Perl 式を使用して名前を変更します。次のコマンドは、ファイルのリスト (KLL*) を受け取り、各ファイルについて、KLL の完全な名前と 3 つの数字 ( KLL\d{3})) を取得し、それを特別な名前付き$1変数に保存します。s式の先頭の は、最初の 2 つの間にあるものを//2 番目のセット ( の完全なファイル名) の間にあるものに「置き換え」、それに$1追加することを意味します.fastq

prename 's/(KLL\d{3})/$1.fastq/' KLL*

答え2

find参照しているディレクトリで次のコマンドを実行すると、問題は解決します。

find . -name 'KLL[0-9][0-9][0-9]' -exec sh -c 'mv $0 $0.fastq' {} \;

これにより、 で始まり3 桁の数字が続く.fastqファイル名に拡張子が追加されます。KLL

答え3

ここでは多くの解決策が考えられますが、その 1 つが次の解決策です。

for f in KLL*; do mv "$f" "$f.fastq"; done

関連情報