重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

renameワンライナーの書き方を教えて下さい。
Xubuntu18.04 i386です。

'(99)_David_Lynch_'\''Good_Day_Today'\''_(Official_Video)_-_YouTub.webm'
lsでこんな表示のファイルがあります。
空白と(99)と括弧(と括弧) を消すワンライナーをご教示下さい。
find . -name "* *" | rename 's/(99) /_/g'
などではだめですね。

A 回答 (2件)

find . -name "* *" |


awk '{old=$0;
gsub(/\(99\)/,"");
gsub(/[()]/,"");
gsub(/\\/,"\\\\");
print "mv \"" old "\" \"" $0 "\""}' | sh
    • good
    • 0
この回答へのお礼

gsubという関数は初めて見ました。正規表現を使う置換コマンドなんですね。
Linuxは奥が深いですね。
教示頂いたワンライナーを勉強して応用したいと思います。
ありがとうございました。

お礼日時:2019/09/02 08:31

ファイル名を " " で囲って、その中の \ を \\ に変更してください。



mv "'(99)_David_Lynch_'\\''Good_Day_Today'\\''_(Official_Video)_-_YouTub.webm'" "'David_Lynch_'\\''Good_Day_Today'\\''_Official_Video_-_YouTub.webm'"

' や \ はそのまま残していいんですかね?扱いにくいと思いますけど。消すなら、
mv "'(99)_David_Lynch_'\\''Good_Day_Today'\\''_(Official_Video)_-_YouTub.webm'" "David_Lynch_Good_Day_Today_Official_Video_-_YouTub.webm"
    • good
    • 0
この回答へのお礼

回答感謝です。
この手の面倒なファイル名のファイルが大量にあるので、
多くのサブディレクトリを含めて、ワンライナーでやりたいのです。
mvでもsed的なワンライナーが書けますよね?

find . -name '*\)*' | rename 's/\)//'
これは成功するのですが、() の2個の一発消し方が分かりません。
括弧の中の文字列は消したいのも置いときたいのも両方あります。

お礼日時:2019/08/31 11:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!