web-dev-qa-db-ja.com

renameコマンドの構文の明確な説明

名前を変更するために男を読んだり、他の人がさまざまなメッセージボードで与えたサンプルスクリプトのトンを読んだ後でも、名前変更コマンドの構文が実際に何を意味するのか理解することさえできません。

私はbashコマンドを学ぼうとしていますが、実際に何を、そしてより重要なことには「何をするのか」を実際に理解せずに、単にインターネットからコマンドをコピーして実行するのがいかに危険かを認識しています。だから、名前変更コマンドの用語が何を意味するのかを誰かが理解するのを手伝ってくれるので、私は自分の動作する正確なコマンドを構築できますか?

具体的には、40以上のyoutubeビデオを同じディレクトリにダウンロードしましたが、それらはすべて-fgrhegrvbfvで終わります(それぞれの後には、完全にランダムな文字があります)。すべてのファイル名で-とその後の12文字を削除したいだけです。どうもありがとう!

2
Turp

最初のパラメーターは、古い名前($_)を新しい名前に変換するPerlスニペットであり、残りのパラメーターは操作対象のファイルです。あなたの場合、あなたはこれをするでしょう:

rename 's/-.{12}$//' *
2
Joseph Sible

これを行う1つの方法を次に示します。

$ ls
file2-fdsa  file-asdf
$ prename -nv  's/(.*)-(.*)/$1/' *-*                  
file-asdf renamed as file
file2-fdsa renamed as file2

これが機能する方法は、一致した文字の2つの「グループ」があることです。したがって、最初の(.*)-の前になり、2番目の(.*)-の後になります。グループ1では$1、グループ2では$2を使用してそれらを参照できます(使用されません)。

*-*は、-を含むすべてのファイルをシェルに渡し、renameコマンドに引数として渡すように指示します。その部分はrename自体とは関係ありませんが、シェルとは関係ありません。私たちの生活が少し楽になります。

これで、コマンド全体を読むことができます:「-を含むすべてのファイルを取得し、各ファイル名について2つのグループに分け、最初のグループにあるファイルのみを名前変更します」。

いくつかのことに注意してください:

  • -nフラグは、ドライランのみを行うために使用されます。実際にアクションを実行する場合は、そのフラグを削除します。
  • -vフラグは、prenameが実際に実行していることの詳細な出力を取得するために使用されます
  • prenamerenameと同じです。 debianパッケージと維持されているものには少し混乱があります。詳細については、 this を参照してください。 kshなどの一部のシェルには、Perlの名前変更とは異なる独自の組み込みrenameコマンドがあります。
0