Find highest numbered filename in a directory where names start with digits

Используйте API-функцию GetVersionEx , определенную в kernel32.dll:

bool IsWindowsVistaOrHigher() {
   OSVERSIONINFO osvi;
   ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
   GetVersionEx(&osvi);
   return osvi.dwMajorVersion >= 6;
}

12
задан jww 15 September 2019 в 21:49
поделиться

8 ответов

$ LIST=($LIST)
$ newfile=`printf %03d-whatever $((10#${LIST[${#LIST}]}+1))`
$ echo $newfile
006-whatever

So, that's bash-specific. Below is a any-posix-shell-including-bash solution, tho I imagine something simpler is possible.

$ cat /tmp/z
f () {
    eval echo \${$#} | sed -e 's/^0*//'
}
LIST='001 002 004 005 '
newname=`printf %03d-whatever $(($(f $LIST) + 1))`
echo $newname
$ sh /tmp/z
006-whatever
$ 
10
ответ дан 2 December 2019 в 03:49
поделиться

Быстро, без подоболочки и без циклов (также обрабатывает имена файлов с пробелами) *:

list=([0-9]*)
last=${list[@]: -1}
nextnum=00$((10#${last%%[^0-9]*} + 1))
nextnum=${nextnum: -3}
touch ${nextnum}_a_new_file.php

Для ваших файлов примеров вывод будет следующим:

006_a_new_file.php
2
ответ дан 2 December 2019 в 03:49
поделиться

Используя только стандартные инструменты, следующий код даст вам префикс для нового файла (006):

ls [0-9]* | sed 's/_/ _/' | sort -rn | awk '{printf "%03d", $1 + 1; exit}'
8
ответ дан 2 December 2019 в 03:49
поделиться

This seems to be more simple.

ls [0-9]* | sort -rn | awk '{FS="_"; printf "%03d_new_file.php\n",$1+1;exit}'
3
ответ дан 2 December 2019 в 03:49
поделиться

Here's a solution (you need bc):

#!/bin/bash

LIST='001 002 008 005 004 002 '
a=0

for f in $LIST
do
    t=$(echo $f + 1|bc)
    if [ $t -ge $a ]
    then
        a=$t
    fi
done

printf "%03d\n" $a
0
ответ дан 2 December 2019 в 03:49
поделиться

Вам нужен весь СПИСОК?

Если нет,

LAST=`exec ls $MY_DIR | sed 's/\([0-9]\+\).*/\1/g' | sort -n | tail -1`

выдаст вам только часть 005, а

printf "%03d" `expr 1 + $LAST`

напечатает следующее число в последовательности.

13
ответ дан 2 December 2019 в 03:49
поделиться
$ for file in *php; do last=${file%%_*} ; done
$ newfilename="test.php"
$ printf "%03d_%s" $((last+1)) $newfilename
006_test.php

. Я оставляю вам создание нового файла

1
ответ дан 2 December 2019 в 03:49
поделиться
  1.  touch "newfile _ $ (printf"% 03d "$ (echo $ (ls 00? _ *. Php | sed 's /_.*//' | sort -rn | голова -1) +1 | bc)) "
     

    2.

     num = $ (ls 00?  *. Php | sed 's / . * //' | sort -rn | head -1) 
    touch $ (printf "newfile_% 03d "$ ((num + 1))) 
     
     

1
ответ дан 2 December 2019 в 03:49
поделиться