tingėjau raiškiai, tai ant smūgio su awk-u pabandžiau:
$ find $(ls -dl *[0-9] | awk '/^d/ {skind=match($9, "[0-9]+$")" "; print substr($9, 0, skind-1)}' | sort | uniq -c | sort -n | tail -n 1 | awk '{print $2}')* | tail -n 1 | awk '{skind=match($0, "[0-9]+$"); prfx=substr($0, 0, skind-1); sffx=substr($0, skind); len=length(sffx); printf("%s%0*d\n", prfx, len, sffx+1)}'
tarkim, in CWD turim keletą rinkinukų:
[s2@katleriai wine-git]$ ls -ld test*
drwxrwxr-x 2 s2 s2 4096 May 23 00:08 test001
drwxrwxr-x 2 s2 s2 4096 May 23 00:08 test002
drwxrwxr-x 2 s2 s2 4096 May 23 00:44 test007
drwxrwxr-x 2 s2 s2 4096 May 23 00:44 test008
drwxrwxr-x 2 s2 s2 4096 May 23 00:44 test009
drwxrwxr-x 2 s2 s2 4096 May 23 00:44 test010
drwxrwxr-x 2 s2 s2 4096 May 23 00:44 test011
[s2@katleriai wine-git]$ ls -ld www*
drwxrwxr-x 2 s2 s2 4096 May 23 00:28 www0
drwxrwxr-x 2 s2 s2 4096 May 23 00:28 www1
drwxrwxr-x 2 s2 s2 4096 May 23 00:28 www2
drwxrwxr-x 2 s2 s2 4096 May 23 00:28 www3
drwxrwxr-x 2 s2 s2 4096 May 23 00:28 www4
drwxrwxr-x 2 s2 s2 4096 May 23 00:28 www5
ir gaunam:
[s2@katleriai wine-git]$ ls -dl *[0-9] | awk '/^d/ {skind=match($9, "[0-9]+$")" "; print substr($9, 0, skind-1)}' | sort | uniq -c | sort -n
1 crt_dbg
1 system
6 www
7 test
štai pagal paskutinę eilutę tokiam sąraše ir bus toliau numeruojama direktorija. mano komanda (pavadinkim ją increase_highest_dir) output-ins taip:
$ increase_highest_dir
test012
jei nori kur tokią dir-ą, tuomet bash-e leidi:
$ mkdir $(increase_highest_dir)
tik gaila, kad nesugebu į alias-ą sukišt šitos ilgos komandikės. (trukdo vidinės viengubos kabutės)
ghm... dekui. :)
s2
Data 2006-05-23 18:39
Redaguota: 2006-05-23 19:56
O pamiegojus štai ir akademinis pavidalas:
#!/bin/bash
order_all_numbered_dirs() { \
ls -dl *[0-9] | \
awk '/^d/ {
skind=match($9, "[0-9]+$")" ";
print substr($9, 0, skind-1)
}' | \
sort | \
uniq -c | \
sort -n ;
}
find_mostly_masively_numbered_dir() { \
find $( \
order_all_numbered_dirs | \
tail -n 1 | \
awk '{print $2}' \
)* | \
tail -n 1 ;
}
increase_number_in_name() {
awk '{
skind=match($0, "[0-9]+$");
prfx=substr($0, 0, skind-1);
sffx=substr($0, skind);
len=length(sffx);
printf("%s%0*d\n", prfx, len, sffx+1)
}'
}
DIR=$(find_mostly_masively_numbered_dir | increase_number_in_name)
echo "* Found" $(find_mostly_masively_numbered_dir) &&
echo "* Calculated" $DIR from this, creating it: &&
mkdir $DIR &&
ls -ld $DIR &&
echo "* Success"
###
šitą jau ir tobulinti lengviau (visokius overflow-us rankiotis ir pradines sąlygas dėliotis;)