ファイル名の空白を置き換える方法は?


8

私はそれを次の方法で試しました:

rename 'bla bla .txt' blabla.txt

しかし、これは機能しません、この場合の正しい構文は何ですか?

回答:


15

rename1つのファイルの名前を変更するために使用するのではなく、代わりにmv(1)を使用してください。

さらに、whitepsaceをエスケープするには、プレフィックスとして\

"Ubuntu One"Ubuntu\ One

あなたのコマンドは

mv bla\ bla.txt blabla.txt
  • バックスラッシュは、次の文字が何らかの形で特殊であることをbashに伝えます。たとえば\a、「ベル」、\リテラルスペースなど

    詳細については、man ascii(7)を参照してください

または、正しいコマンドを使用しているためmv、スペースが多い場合はファイル名を引用符で囲むことができます。

mv "bla    bla.txt" blabla.txt

(これはbla\ \ \ \ bla.txtエスケープ形式になります)

  • bashでは、引用符で囲まれた文字列(単一引用符または二重引用符)は単一の引数として扱われますが、引用符で囲まれていない文字列は次のように複数の引数に分割されます。

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    そしてmv期待する:

    • ["mv", "source", "destination", ]
  • 注:「mv」と入力し、ファイル名の最初の数文字を押してを押すTABと、ファイル名のエスケープバージョンが表示され、名前をすばやく簡単に変更できます。


renamemanページの例で示されているように、正規表現を使用してファイルの名前変更をバッチ処理するために使用されます

rename 's/\.bak$//' *.bak

「* .bak」に一致するすべてのファイルから.bak(文字列[$]の末尾)の出現をすべて取り除くため。


元のファイル名に空白がたくさんある場合、コマンドはどのように見えますか?単純な正規表現があるので、すべての空白をエスケープする必要はありませんか?
NES 2010

多くのスペースと単一引用符と二重引用符を扱うように回答を更新しました。
ステファノパラッツォ

一重引用符と二重引用符には違いがありますが、この問題は問題になりません。詳細については、この記事を参照してください
ステファノパラッツォ

4

renameは、一括名前変更に特化したコマンドです。直感的ではありませんが、通常「名前の変更」と呼ばれるのは、実際には新しい名前への「移動」です。

mv 'bla bla .txt' blabla.txt

ファイル名を一重引用符と二重引用符で囲むことの違いは何ですか?
2010

4
二重引用符を使用すると、変数を拡張したり、プロセスを置換したりできます。単一引用符ではできません。A=bla ; mv "$A $A .txt" blabla.txtbla bla .txtを移動しA=bla ; mv '$A $A .txt' blabla.txtますが、実際には「$ A $ A .txt」という名前のファイルを探します。どちらでもあなたの例ではうまくいきます。
10

1
rename "s/\s//g" "bla bla.txt"

sはsed Substituteコマンドです。

\ sはwhiteSpace用です

あなたは何も入れ替えません。それ以外の場合、置換文字列は2番目のスラッシュの後に置かれます。

gはグローバル、つまりすべてのインスタンスを置き換えます。gを省略すると、最初のインスタンスのみが置き換えられます。


このコマンドは、すべてのファイルで空白をアンダースコアに置き換えます。

rename "s/\s/_/g" *
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.