Com zsh
ou bash
ou yash -o braceexpand
:
$ mkdir dir-{01..50}
$ touch dir-{01..50}/file{01..50}.txt
$ ls dir-45
file01.txt file09.txt file17.txt file25.txt file33.txt file41.txt file49.txt
file02.txt file10.txt file18.txt file26.txt file34.txt file42.txt file50.txt
file03.txt file11.txt file19.txt file27.txt file35.txt file43.txt
file04.txt file12.txt file20.txt file28.txt file36.txt file44.txt
file05.txt file13.txt file21.txt file29.txt file37.txt file45.txt
file06.txt file14.txt file22.txt file30.txt file38.txt file46.txt
file07.txt file15.txt file23.txt file31.txt file39.txt file47.txt
file08.txt file16.txt file24.txt file32.txt file40.txt file48.txt
$ tar -cf archive.tar dir-{01..50}
com ksh93
:
$ mkdir dir-{01..50%02d}
$ touch dir-{01..50%02d}/file{01..50%02d}.txt
$ tar -cf archive.tar dir-{01..50%02d}
A expansão ksh93
brace usa uma string de formato printf()
que pode ser usada para criar os números com zeros.
Com um POSIX sh
:
i=0
while [ "$(( i += 1 ))" -le 50 ]; do
zi=$( printf '%02d' "$i" )
mkdir "dir-$zi"
j=0
while [ "$(( j += 1 ))" -le 50 ]; do
zj=$( printf '%02d' "$j" )
touch "dir-$zi/file$zj.txt"
done
done
tar -cf archive.tar dir-* # assuming only the folders we just created exists
Uma alternativa para criar seu arquivo tar
sem criar muitos arquivos, em bash
:
mkdir dir-01
touch dir-01/file{01..50}.txt
tar -cf archive.tar dir-01
for i in {02..50}; do
mv "dir-$(( i - 1 ))" "dir-$i"
tar -uf archive.tar "dir-$i"
done
Isto apenas cria um dos diretórios e adiciona-o ao arquivo. Como todos os arquivos em todos os 50 diretórios são idênticos em nome e conteúdo, ele renomeia o diretório e o acrescenta ao arquivo em iterações sucessivas para adicionar os outros 49 diretórios.