用于循环和重命名文件的bash脚本

时间:2015-08-18 02:59:26

标签: bash

我使用csplit从单个较大的文件中编写单独的较小文件

#!/bin/bash
OBJECT=$1; $TARGET="bigfile.pgn";

FIRST_NEW_GAME=$2; 

csplit $TARGET /Event/ {*};

ls xx*

echo 'How many games do we have?'; read NUMGAMES 

#xx00  xx01  xx02  xx03  xx04  xx05
# I just grab "5" for $NUMGAMES

我现在有5个文件,准备将它们重命名为$ FIRST_NEW_GAME + 1

while [ $X -le $NUMGAMES ]; do
let X=X+1 
pseudo code: mv xx[01-05] 5337+[$X].pgn
done;

我有xx [01-01]并想创建FIRST_NEW_GAME(“5436”)+ $ X  例如:xx01变为5336.pgn,xx02变为5337.pgn等

但是最后一次while循环超出了我的范围。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的伪代码和示例使用不同的偏移量,只需选择一个并填写即可。 在计算(( newnum = num + offset ))中,shell知道它是一个带变量的计算,并且你需要$作为变量的值。

offset=5337
for file in xx[0-9]*; do
        # Special syntax to cut of the xx, this is faster than
        # num=$(cut -dx -f3)
        # Using cut is easier to remember ;)
        num0=${file##*x}
        #num0 can start with a 0, thats octal. Remove the 0 in the front.
        num=${num0#0}
       (( newnum = num + offset ))
        mv $file  ${newnum}.pgn
done
编辑:用xx01测试直到xx05,但我忘了05是八进制表示法。 对于05来说这没问题,08和09就是这样!