如何将TAR用于目录范围?

时间:2014-02-04 08:41:45

标签: bash unix tar

我有很多目标:

    /dir/1/
    /dir/2/
    ...
    /dir/1200/

我需要将范围0-999,1000-1999,2000-2999的目录tar到d0.tar.bz2,d1.tar.bz2,d2.tar.bz2等等。

我写了这个剧本:

    #!/bin/bash
    for i in {0..10}
    do
            let "tt = ($i+1)*1000"
            let "ff = $i*1000"
            tar -cfv /backups/d$i.tar.bz2 /dir/{$ff..$tt}
    done

但我在跑步时遇到错误:

    tar: Removing leading `/' from member names
    tar: /backups/d0.tar.bz2: Cannot stat: No such file or directory
    tar: /dir/{0..1000}: Cannot stat: No such file or directory
    tar: Exiting with failure status due to previous errors

我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

我做错了什么?

Brace expansion在变量扩展之前发生,说:

... /dir/{$ff..$tt}

无效。

解决方法可能是使用数组和Shell Parameter Expansion

range=($(seq $ff $tt))
... "${range[@]/#//dir/}"