ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

LinuxコミュのChat GPT-4 で Linux shell script を秒で作る

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ChatGPT-4 と小山さん(私)とのやりとり。

【小山さん】 Help me write a simple Bash script for Linux. Suppose that there are several files sorted alphabetically but ending with the file extension ".jpg" in your working directory. I want to rename those files "foo001.txt", "foo002.txt", and so on. That is, the prefix of the file names are "foo", followed by three digits with leading zeros if needed, and the file extension ".jpg".



【ChatGPT-4】 Sure, I can help you with writing a simple Bash script for Linux. Here is one possible solution:

```
#!/bin/bash
# A script to rename files ending with .jpg in the current directory
# The new file names are foo001.jpg, foo002.jpg, and so on

# Initialize a counter variable
count=1

# Loop through the files ending with .jpg in the current directory
for file in *.jpg
do
# Format the new file name with leading zeros
new_file=$(printf "foo%03d.jpg" $count)

# Rename the file using the mv command
mv "$file" "$new_file"

# Increment the counter by one
count=$((count + 1))
done
```

You can save this script as a file, such as rename.sh, and make it executable by running chmod +x rename.sh. Then you can run it in your terminal by typing ./rename.sh.

I hope this helps. If you have any questions or feedback, please let me know. 表情(嬉しい)


【小山さん】 ギョエーー!! おいらの仕事がなくなっちゃうよ!!

- - -

ChatGPT を起爆剤とするチャット AI は、90年代の「一般向けインターネット」に近い、30年来の衝撃。ただ今回もインターネットと同様、「人間ユーザーがどう使うか」が問題だと思う。「テレビ (1960s)」にせよ「電気 (1930s)」にせよ、人類の大発明って30年周期なんですな。

コメント(5)

挙動が安定しないechoを使わずにprintfを使ったり、算術式で提示したり優秀ですね。若手なら間違いなくインクリメントがexprで速度がもっさりしたのが出来上がります。
>>[1]

ごめん漏れすーーっと読んでた

まず数字を必ず3ケタ(必要に応じて頭にゼロを加える)ということで printf は必須、
ただ1とか increment するだけなんで $(()) で演算

今改めて見てもケチつけるとこそんなにないかな

強いて言うなら

for もごもご; do と一行にまとめたいのと
シェルスクリプトのケツは exit $? で終わらせたいけど
これらは古いユーザーの好み程度なのよね
>>[2]
尻はexitで確かに終わらせたいですね。chatGPTもなめてた部分がありますが、この結果を見ると、本当になかなか優秀です。
一番大変なのは、どういった質問文 (クエリ)を入力するかということ

なんかうまい質問文例をテンプレート集みたいにまとめるといいかなあ

ネットの「ググれ (use Google)」と同じで、グーグルで調べられる人は質問内容を最初からだいたい分かってる人で、こういう論理的考えと国語力の強い人が情報強者になれるんです

ChatGPT も、なんかそのパターンになる気がします
漏れだって冒頭の Linuxシェルスクリプト書くクエリを書くの、高々3文といえ結構頭ひねりましたわ。。
続き。

もう一つ画像のたくさん入った ZIP ファイルがありました。意地悪なことにファイル名が Shift JIS でエンコードされています。

【小ネタ】こうした場合、unzip ではなく unar コマンドで ZIP を展開すると、ファイル名から文字コードを判定し、システムのコードに直してくれる。

前回同様、英数字以外のファイル名は気持ち悪いので、"foo001.jpg" みたいに英数字に直したいと思います。ところが、今回の画像ファイルは番号の冒頭にゼロがなく、そのため1桁だったり3桁だったりします。この番号を変更後のファイル名にもそのまま使いたいと思います。つまり、

ギャル糞根大食いうんこ1.jpg -> foo1.jpg
ギャル糞根大食いうんこ2.jpg -> foo2.jpg
...
ギャル糞根大食いうんこ9.jpg -> foo9.jpg
ギャル糞根大食いうんこ10.jpg -> foo10.jpg
ギャル糞根大食いうんこ11.jpg -> foo11.jpg
...
ギャル糞根大食いうんこ99.jpg -> foo99.jpg
ギャル糞根大食いうんこ100.jpg -> foo100.jpg
ギャル糞根大食いうんこ101.jpg -> foo101.jpg
...

みたいなかんじにファイル名を変更したいのです。

Shell script でどうやって文字列から数字だけ(というか正規表現でマッチする部分)切り抜いて値に入れ込みたいのですが、どういった syntax だったかど忘れしたので ChatGPT にまた訊きました(画像1)。


結局、先の ChatGPT で得られたヒントをもとに、Line 13 & 14 を挿入して、事なきを得ました(画像2)。

【結論】正確な Syntax まで覚えてなくても、「Bash でこういう操作をしたい」「こういう操作が Bash ならできる」という経験は ChatGPT を利用するにしても必須なのかなという印象。ぼくの一番最初の質問文がよくなかったかもしれないすけど。まあ最低限、shell script でなくて Python でもいいから、一通りスクリプト言語のパターンは抑えておいたほうがいいのかなあ。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Linux 更新情報

Linuxのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。