質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

解決済

2回答

1418閲覧

renameコマンドで連番を振りたい

smnsmn

総合スコア175

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

0グッド

0クリップ

投稿2017/12/27 11:41

linuxです。

imageというディレクトリに、下記のようなファイルがあるとします。
0から始まるファイルは番号が振ってありますが、抜けがあります。
0から始まるファイルのみ、抜けのない連番のファイル名を付け直したいです。

image/ 01.jpg 02.jpg 04.jpg 08.jpg image.jpg

image/ 01.jpg 02.jpg 03.jpg 04.jpg image.jpg

renameコマンドで連番が振れるとのことだったので、
こちらをみて、下記のコマンドを実行して見ましたが、
何も変わりませんでした。

rename -N ...01 -X -e '$_ = "$N"' 0*.jpg

どうすれば実現できますでしょうか。
ご教授いただけますと幸いです。
何卒よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

そのページで解説されているのは、標準のrenameでは無いです。
Perlで書かれたスクリプトですね。
冒頭の、

rename 1.600

がリンクになっているので、そこをクリックして表示されるPerlスクリプトを使って下さい。

初心者マークが付いているので、念のために説明すると、そのページをrenameという名前でダウンロードして、
perl rename -N 01 -X -e '$_ = "$N"' 0*.jpg

もしくは、chmod +x renameして、./rename -N 01 -X -e '$_ = "$N"' 0*.jpg

投稿2017/12/27 12:15

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smnsmn

2018/01/30 07:09

遅くなりましたがご回答ありがとうございます。 私が見ていたのはコマンドではなかったのですね。 ダウンロードから使い方までご説明いただきありがとうございます。 説明がなければわかりませんでした。本当にありがとうございました。
guest

0

ベストアンサー

bash

1$ cd image 2$ ls 0*.jpg|awk '{printf "mv %s 0%s.jpg\n",$1,NR}'|sh

追記

ワンライナーにこだわるなら:

bash

1$ ssh <Server> "cd /home/hoge/image&&ls 0*.jpg|awk '{printf \"mv %s 0%s.jpg\n\",$1,NR}'|sh"

ヒアドキュメントを使う方法:

bash

1$ cat <<'EOS'|ssh <Server> sh 2> cd /home/hoge/image&&ls 0*.jpg|awk '{printf "mv %s 0%s.jpg\n",$1,NR}'|sh 3> EOS

投稿2017/12/27 12:03

編集2017/12/28 03:44
hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smnsmn

2017/12/28 02:31

ご回答ありがとうございます。 やりたいことが実現できました。1つ1つのオプションを調べたいと思います。 もし、可能でしたらご教授いただきたいのですが、 上記コマンドをssh接続した先で実行したい場合どうすれば良いでしょうか? ssh hoge@IPアドレス cd /home/hoge/image && ls 0*.jpg|awk '{printf "mv %s 0%s.jpg\n",$1,NR}'|sh このように実行すると、なぜかローカルを見にきてしまうようで「ls: 0*.jpg: No such file or directory」となってしまいます。 色々試して見ているのですが、うまく動かず、よければご回答頂けますと幸いです。
hichon

2017/12/28 03:46

回答に追記しました。 「&&」などが手元のシェルで解釈されないように適切にエスケープする必要があります。
smnsmn

2018/01/30 07:14

丁寧にご回答いただきましてありがとうございました。 無事に希望の動きを実装することができました。 エスケープ等についても大変勉強になりました。 お礼が遅くなりましたが、ベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問