35819


ubuntu11.10でカレントディレクトリのファイル名に含まれた複数のスペースを_(アンダースコア)に変換する方法についてご教授頂きたいです。変換したいファイルはカレントディレクトリに××
×× ××（××は英数字）のような名前で複数あります。  
hoge.shというシェルスクリプト中でrenameコマンドを実行しているのですが、

[code]

    $ cat hoge.sh
    #!/bin/sh
    
    rename 's/ /_/;' ./*
    
[/code]

下記のようなエラーが出てしまう状態です。

[code]

    $ ./hoge.sh
    Unsuccessful stat on filename containing newline at /usr/bin/rename line 59.
    
[/code]


CC BY-SA 3.0
2017-06-22T11:24:44.317
35815
2017-06-22T16:10:11.127
19297
question
linux ubuntu
ubuntu11.10でカレントディレクトリのファイル名に含まれた複数のスペースを_(アンダースコア)に変換する方法


パターンの指定部分に恐らく;(セミコロン)は不要なのと、スペースが複数含まれるケースを考慮すると  
`$ rename "s/ /_/g" ./*`


CC BY-SA 3.0
2017-06-22T11:52:13.430
35816
2017-06-22T11:52:13.430
3060
35815
answer


ファイル名に改行が含まれていて、`rename` コマンドがそれを扱えないのかも知れません。  
以下のように、改行も `_` に変換するとどうでしょうか。

[code]

    rename 's/[ \n\r]/_/g' ./*
    
[/code]

改行はそのままにしたい場合は、例えば bash なら以下のような方法があります。

[code]

    for file in ./*; do mv -i "$file" "${file// /_}"; done
    
[/code]


CC BY-SA 3.0
2017-06-22T16:10:11.127
35819
2017-06-22T16:10:11.127
3054
35815
answer