• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ターミナルでファイル名の指定部分を消す)

ターミナルでファイル名の指定部分を消す

このQ&Aのポイント
  • ターミナルコマンドで、ファイル名の指定部分を消す方法を教えてください。
  • フォルダ内にある複数のファイルの名前を一括で変更する方法を教えてください。
  • ターミナルでのファイル名の変更について、具体的なコマンドと使用方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.4

>あの、“>”はなんなのでしょうか?? コマンドが完結していない場合に出ます。 例えばforループの途中までしか入力していない場合です。 for F in $(seq 5 15); do echo "mv '01 $F.rtf' 01$F.rtf" ; で改行すると、表示されます。その時に残りのdoneを入れると完結しますので動き出します。 >長いコマンドを入力(ペースト)した際に、1行で表示されてしまうことが多々あります。 普段はMacのターミナルでLinuxに接続して使う場合が多いのですが、そんなことが過去にあったように思います。 カーソルを動かして編集をしない限り問題なかったように思いますので、実害はないのでそういうこともあるのかと気にしていませんでした。何もしなくても回復したので原因は特定できていませんが、最近はお目にかかったことはありません。 多発するようであれば、ターミナル関係の設定ファイルを消してしまうのも手かも知れません。 ~/Library/Preferences/ に com.apple.Terminal.plist があります。

oasis7085
質問者

お礼

ようやく、出来るようになりました!! ターミナルはやはりおかしかった様です・・・ご指摘にあった、“com.apple.Terminal.plist”を削除して、安定して動作するようになりました。 今回は、最後までお付き合いいただき、感謝してます。 ターミナルは今後も勉強していきたいと思います。 本当にありがとうございました!!

その他の回答 (3)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.3

No.2のスクリプトに間違いがありました。幸いエラーがでるだけですが、場合によってはファイルを消してしまったりする場合もありますので、コマンドが正しいか確認後実行するようにするために、|shを付けるようにしています。 ls|ruby -n -e 'f=$_.chomp; puts %[mv -n "#{f}" #{f.gsub(/ /,"")}] if f[/ /]' が正解です。 mvは名前が上書きしてしましますので、-nか-iを付けるのがよいようです。

oasis7085
質問者

お礼

細かいご指示ありがとうございます。とても助かります。 今後使ってみたいと思います。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

shellスクリプトを使おうとするので、結構経験者かと思っていました。 特に何も設定していなければbashが起動しますので、起動した状態のままでbashが起動した状態です。 こちらでも試してみましたが、正常に動きますよ。 動かす前にcdで変更したいファイルが入っているフォルダに移動していますか? Finderでそのフォルダを表示させ、ターミナルに cd(スペース)と打ち込んで、その後でFinderに表示されているフォルダのアイコンをターミナル画面にドラッグします。 表示は cd /Users/xxxx/xxx/xx のような感じになるはずです。 ls で変更したいファイルが表示されることを確認後実行してみてください。 shellスクリプトのループなどは結構敷居が高いので、どうしてもshellスクリプトでないといけない場合以外お勧めしません。 標準でRubyやPerlなどが入っていますので、そちらでやる方がずっと簡単です。 Rubyでの例ですが ls|ruby -n -e 'f=$_.chomp; puts %[mv "#{f}" #{f.strip}] if f[/ /]' でファイル名に空白が入っている場合に、空白の無いファイル名にするというものです。 上のスクリプトは表示だけですので、同じく後ろに|shを付ければコマンドが実行されます。 強引に一行に押し込んだのでちょっとみにくいスクリプトになっていますが。

oasis7085
質問者

補足

度々のご回答ありがとうございます。ki073さんの言う通り、No.1の for F in $(seq 5 15); do echo "mv '01 $F.rtf' 01$F.rtf" ;done|sh を実行して結果を出す事が出来ました!ありがとうございます。 ただ・・・結果が出たのですが、どうも当方のターミナルの挙動がおかしいです。というのは、上のコマンドを実行(上記コマンド入力後、returnキーを押下)しても、“>”の表示がされ、何も起きない時があるのです。しかし、結果が出る時もあります。 No.1の回答を頂いた時は、上記状態になり、なかなか結果がでませんでした。 あの、“>”はなんなのでしょうか?? 表示としては、以下のイメージです。 xxx$ for F in $(seq 5 15); do echo "mv '01 $F.rtf' 01$F.rtf" ;done|sh > この表示なると、結果が出ません。 結果が出る出ないの操作上の違いはありません。コピーペーストで、実行しているので間違いなく同じコマンドです。 また、当初からcd にて、ターゲットのフォルダに移動してあり、ls にてフォルダ内のファイルも問題なく表示されます。 因に、ターミナルのウインドウサイズが初期のままの状態で使用していると、長いコマンドを入力(ペースト)した際に、1行で表示されてしまうことが多々あります。その状態で、ウインドウサイズを変更すると、文字がバラバラに散らばってしまいます。これは、もうバグですよね?? 私の環境のターミナルが何かおかしいのでしょうか?? 因にOSは10.8.4です。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

bashだとして書きます。 単純にFを出力するスクリプトに変えてみますと for F in "01 [5-15].rtf"; do echo $F;done 出力は 01 [5-15].rtf となるだけですので、forが回っていません。 まずコマンドを実行するのではなくechoで出力するだけにします。 for F in $(seq 5 15); do echo "mv '01 $F.rtf' 01$F.rtf" ;done これで期待するmv命令が出力されるはずです。 後ろに|shをつけて for F in $(seq 5 15); do echo "mv '01 $F.rtf' 01$F.rtf" ;done|sh を実行すると期待した動作をするはずです。

oasis7085
質問者

補足

ご回答ありがとうございます。 bash・・・ですか。 色々とサイトを見ていまして、お返事に時間がかかりました。 率直な感想、私には敷居が高そうです。 ターミナルの環境設定から、設定➡シェルにて、bashにて起動 ですよね? その後、ki073さんの通りに実行していったのですが、結果としてファイル名は変更できませんでした。 for F in $(seq 5 15); do echo "mv '01 $F.rtf' 01$F.rtf" ;done|sh を実行すると、 > となり、ここから更に何かを実行しなくてはいけないという事でしょうか?? すいません。Mac歴は7年程経つのですが、恥ずかしながらターミナルは完全な初心者で、2~3日前からサイトみるなりしていまして・・・

関連するQ&A