سؤال

I have a lot of dirs like:

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

I need to tar directories by range 0-999, 1000-1999, 2000-2999 into d0.tar.bz2, d1.tar.bz2, d2.tar.bz2 and etc.

I wrote this script:

    #!/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

But I have errors while running:

    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

What am I doing wrong?

هل كانت مفيدة؟

المحلول

What am I doing wrong?

Brace expansion happens before variable expansion, saying:

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

would not work.

A workaround might be to use an array and Shell Parameter Expansion:

range=($(seq $ff $tt))
... "${range[@]/#//dir/}"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top