端末またはスクリプトの特定の場所にスペースおよび/または句読点を持つ複数のファイル名に文字を挿入する方法

端末またはスクリプトの特定の場所にスペースおよび/または句読点を持つ複数のファイル名に文字を挿入する方法

多くのファイルを含むディレクトリで特定の方法で名前を変更するために、特定の文字を音楽ファイルに挿入しようとしています。したがって、これを手動で実行するのは時間がかかり、端末またはプログラムを使用してこのプロセスを自動化したいと思います。バッシュスクリプト。

これは音楽コレクションなので、多くのディレクトリに分散された多くのファイルがあります。

私はいくつかの「awk」、「rename」、「sed」のターミナルオプションを試しましたが、ターミナルから本当に不思議な出力を得るようです(おそらくスペースや句読点のため)。ジョブを停止するには、Ctrl + zを押す必要があります。または単に間違っています。 「Krename」と「Easytag」も試してみましたが、成功しませんでした。

たとえば、次を変更したいと思います。

Chicane - Behind the Sun - 01 Overture.mp3

到着する:

Chicane - Behind the Sun - 01 - Overture.mp3

だから31列や位置に「-」を追加してファイル名を変更したいのですが、このフォルダにファイルが10個あり、他のフォルダ(アルバム)も多く、変更したいので、好きな場所とキャラクターの追加が変わります。

私のbash /スクリプト技術は101です。圧縮やその他の簡単なタスクを使っていくつかのバックアップスクリプトを管理しましたが、これは私の能力を超えているので、助けてくれてありがとう。

私はこれが重複していることを知っていますが、成功せずに多くのオプションを試してみましたが、学んでおり、あなたの助けを借りて解決策がすぐに鼻の前にあるので、事前に感謝します。

答え1

Perlの名前変更ツールを使用して、

最初の30文字(またはバイト、ロケールが有効になっているかどうかわからない)の後に挿入-(ダッシュとスペース):

rename 'substr($_, 30, 0) = "- "' *.mp3

-2つの数字とスペースが最初に表示される後に追加します。

rename 's/(\d\d )/$1- /' *.mp3

renamePerlでは1つutil-linux、Perlでは1つ、2つの異なるコマンドがあります。彼らは別のことをします。参照:

答え2

スペースを含むファイル名を処理するには、findとが必要ですxargsman find xargs読んで

find . -type f -print0 | xargs -0 --no-run-if-empty someprogram ...

ASCII NUL(0x00)バイトで区切られたファイル名のリストを生成するように指示します-print0findNUL(および " /")はファイル名には表示されません。

xargs -0xargsこのようにゼロで区切られたリストを使用し、システムに許可されるだけの数のファイル名を渡すように指示しますsomeprogram。これによりsomeprogram、ファイル名がなくなるまで引き続き呼び出されます。

xargs --show-limits </dev/null制限が表示されます。

関連情報