Linux

Linuxで複数ファイルのファイル名の中の複数の箇所の文字列を任意の文字列に変換する方法

先日、複数ファイルのファイル名の中にある2箇所の文字列を消したいなあと思い、いきついた方法。

たとえば、
hoge123fuga-ed.txt
という名前のファイルがあるとする。
このファイルは123から200まで連番であったと。

こいつを
123fuga.txtから
200fuga.txt
に変換したい。

そうした場合以下の方法が有効であった。

find ./* -type f | sed 'p;s/hoge//g;s/-ed//g' | xargs -n2 mv

findでカレントディレクトリ以下のファイルを全てリストアップする。

リストアップされたファイル名をsedをつかって編集する。

‘p;s/hoge//g;s/-ed//g’の意味は以下の通り

p;
によって元のファイル名が出力される事になる。
次に
s/hoge//g;
でファイル名の中のhogeを全て空白に変換している

そしてもういちど

s/-ed//g;

によってファイル名の中のすべての-edを空白に変換。

ここまでで実行すると

元のファイル名1
変更されたファイル名1
元のファイル名2
変更されたファイル名2
元のファイル名3
変更されたファイル名3
.
.
.

という結果がコンソールに表示される。

これらをパイプを介して

xargs -n2

する事によって

元のファイル名1 変更されたファイル名1
元のファイル名2 変更されたファイル名2

という形に整形できる。

あとは最後の

mv

によって全てのの元のファイル名が変更されたファイル名に変更される。

|xargs -n2 mv

って使い方初めて見ました。

リファレンスはこちら。
xargs コマンド | コマンドの使い方(Linux) | hydroculのメモ

不思議な感じでちょっと覚えにくいですが、こういう使い方ができるし、動きますっていう事で。

Linux Mintの立ち上げ直後にプログラムを一度だけ実行する方法前のページ

Linuxで複数のファイルの末尾にワンライナーで文字列を追記する方法次のページ

関連記事

  1. Linux

    Screenを使ってSSHの中断と再開

    SSHを使ったUnix系シェルの操作時に、GNU-Screenを使って…

  2. Linux

    [linux] apt-getで特定のバージョンをインストールする

    sudo aptitude search パッケージ #パッケージ名の…

  3. Linux

    Linux mintのシェルをbashからzshに変更する方法

    環境Linux Mint 17.1 Rebeccazsh 5.0…

  4. bash

    soracom SIMで通信中のラズパイにSSHで接続する

    最近はラズベリーパイをつかってIoTデバイスを作ろうという試みをやって…

  5. Linux

    Linux上でPythonを使っている時、指定ディレクトリのファイル一覧を簡単にリスト化する方法

    先日Linux上でPythonのプログラムを開発していた時にディレクト…

  6. bash

    定時に圧縮ファイルを作成してバックアップするようにした。その注意点

    あるディレクトリの中の検査データを圧縮して、同じネットワーク内のNAS…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP