9
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

ファイルの拡張子の一括置換


後輩が1ファイルずつ変換コマンドを作っていたので、
こういうやり方があるよと調べながら教えたのでメモ。

  • カレントディレクトリにあるファイルの.txtのファイルを.csvに変換する例
ls *txt | sed -e s/\.txt// | awk '{print $1 ".txt " $1 ".csv"}' |xargs -n 2 mv

若手の時に先輩にこんなコマンドを渡されても
何が何だかわからず調べることも出来なかったのでちと説明。
lsの代わりに「find . -name '*txt'」とかだとカレントディレクトリ以外もいける。

1. 一覧を出す

$ ls *txt
foo.txt     hoge.txt

2. ファイル名だけにする

# .txtを置換して消してるだけ。
$ ls *txt | sed -e s/\.txt//
foo
hoge

【 sed 】 文字列の置換,行の削除を行う

3. mv用のパラータの作成

$ ls *txt | sed -e s/\.txt// | awk '{print $1 ".txt " $1 ".csv"}'
foo.txt foo.csv
hoge.txt hoge.csv

【 awk 】コマンド(基本編)

4. あとはmvコマンドにパラメータを流す

$ ls *txt | sed -e s/\.txt// | awk '{print $1 ".txt " $1 ".csv"}' |xargs -n 2 mv

【xargs】標準入力から生成したコマンドラインを実行する

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
9
Help us understand the problem. What are the problem?