Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2912

bashでファイル名にサフィックス(連番)を付加する

$
0
0

要件

  • 特定のファイルにサフィックスを付加したい
  • サフィックスは_2桁の自然数(つまり_01_99)とする
  • サフィックスは既存のファイルの中で最大のサフィックスより1だけ大きい値とする
  • 既存のファイルがない場合、サフィックスは_01とする
  • _99が存在するケースは考慮しなくてよい
  • 関係のないファイルは無視する

具体例

例1

/home/micky/workというディレクトリに以下のファイルが存在する場合

  • AAA.dat(サフィックスを付加するファイル)
  • AAA_01.dat

この場合、AAA.datの変更後のファイル名はAAA_02.datになる

例2

/home/micky/workというディレクトリに以下のファイルが存在する場合

  • AAA.dat(サフィックスを付加するファイル)
  • AAA_01.dat
  • AAA_98.dat

この場合、AAA.datの変更後のファイル名はAAA_99.datになる

例3

/home/micky/workというディレクトリに以下のファイルが存在する場合

  • AAA.dat(サフィックスを付加するファイルだけ

この場合、AAA.datの変更後のファイル名はAAA_01.datになる

例4

/home/micky/workというディレクトリに以下のファイルが存在する場合

  • AAA.dat(サフィックスを付加するファイル)
  • AAA_001.dat(関係ないファイル)

この場合、AAA.datの変更後のファイル名はAAA_01.datになる

bash で実装

環境

  • VirtualBox 6.0
  • OS : Cent OS release 7.2.1511
  • bash : 4.2.46
#!/bin/bashwork=/home/micky/work/
suf=(`ls"${work}" |
    awk'match($0, /^AAA_([[:digit:]]{2})\.dat$/, a) { printf "%02d\n", ( a[1] + 1 ) }' |
    sort-n |
    tail-1`)mv"${work}"AAA.dat "${work}"AAA_"${suf:-01}".dat

補足

ついでに PowerShell でも実装

環境

  • OS : Windows 10 Pro 1903
  • PowerShell : 5.1
$work='c:\work'Rename-Item(Join-Path$work'AAA.dat')-NewName('AAA_{0:00}.dat'-f((@(dir$work|?{$_.Name-match'^AAA_(\d{2})\.dat$'}|%{$Matches[1]})+'0'|Measure-Object-Maximum).Maximum+1))

補足

  • -matchで正規表現によるパターンマッチを行う
  • $Matchesで部分文字列の取得
  • AAA_xx.datが無い場合の考慮:+ '0'で、あらかじめ要素'0'を用意しておく
  • Measure-Object -Maximumで最大値を取得する

Viewing all articles
Browse latest Browse all 2912

Trending Articles