
ターミナルコマンドで、いろいろ試したのですが上手くいきません。ご教授お願いします。
フォルダ内に、001.rtf~004.rtf のファイルがあります。
さらに、このフォルダ内には、01 5.rtf、01 6.rtf、01 7.rtf ・・・というファイル名が、01 15.rtf まであります※01の後に半角スペースが入ってます➡01<半角スペース>5.rtf
この、01 5.rtfから始まるファイルを、005.rtf~015.rtf としたいのです。
ターミナルコマンド解説サイトなどを拝見しながら試しているのですが、上手くいきません。
以下は私が、実施したコマンドです。どの辺が間違っていますでしょうか??
for F in "01 [5-15].rtf"; do mv $F ${F/"01 "/00};done
do以降の、{F/"01 "/00} の辺りが間違っているかな??と思うのですが、どうして良いか分からず・・・
そもそも、上記コマンド自体が間違っているとか?!
よろしくお願いします。
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
があります。
ようやく、出来るようになりました!!
ターミナルはやはりおかしかった様です・・・ご指摘にあった、“com.apple.Terminal.plist”を削除して、安定して動作するようになりました。
今回は、最後までお付き合いいただき、感謝してます。
ターミナルは今後も勉強していきたいと思います。
本当にありがとうございました!!
No.3
- 回答日時:
No.2のスクリプトに間違いがありました。
幸いエラーがでるだけですが、場合によってはファイルを消してしまったりする場合もありますので、コマンドが正しいか確認後実行するようにするために、|shを付けるようにしています。ls|ruby -n -e 'f=$_.chomp; puts %[mv -n "#{f}" #{f.gsub(/ /,"")}] if f[/ /]'
が正解です。
mvは名前が上書きしてしましますので、-nか-iを付けるのがよいようです。
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を付ければコマンドが実行されます。
強引に一行に押し込んだのでちょっとみにくいスクリプトになっていますが。
この回答への補足
度々のご回答ありがとうございます。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です。
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
を実行すると期待した動作をするはずです。
この回答への補足
ご回答ありがとうございます。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) パスワード付きExcelブックについて 4 2022/06/02 21:34
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Windows 10 コマンドプロンプトの使い方 1 2022/10/13 14:43
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- その他(OS) DOSコマンド『dir』の『/o』オプション 3 2023/03/10 09:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
scpコマンドでリモートサーバの...
-
月毎のログファイルサイズの平...
-
atコマンドによるスケジュール...
-
【ターミナル】MacBookにディー...
-
linuxでの実行中のプログラムの...
-
DOSコマンドでディレクトリ以下...
-
Warning: Output is not to
-
fedora10でソフトウェアの追加...
-
別名でリンク先を保存。
-
cactiでグラフが表示されない
-
DOSコマンドでのワイルドカ...
-
/etc/hosts ファイルのリンクに...
-
shell の time コマンドの結果...
-
コマンドの連続実行とコマンド...
-
Linuxのユーザーのパスワードを...
-
DOS コマンドが・・・
-
batファイルから起動したscrフ...
-
[linux command] | と > の違い...
-
回復コンソールでも修復できな...
-
cron登録不可(´・ω・`)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
scpコマンドでリモートサーバの...
-
Illustratorのデータをまとめて...
-
cactiでグラフが表示されない
-
DOSコマンドでのワイルドカ...
-
Windows10のRegSys32に登録され...
-
【ターミナル】MacBookにディー...
-
Warning: Output is not to
-
IBM漢字コードのSJIS変...
-
rcpコマンドについて、教えて!
-
Linux shell ftp 転送 エラー制御
-
FTP接続中のコマンド実行結果を...
-
wgetの正規表現について
-
loggerコマンドでkern.warning...
-
BATファイル実行にフォーカ...
-
telnet,rlogin,rshの違いってな...
-
lsコマンドで表示するファイル...
-
AIX ksh利用 grep 検索で マ...
-
PC-DOSのバージョンの違いによ...
-
月毎のログファイルサイズの平...
-
属性変更できないです。
おすすめ情報