BASH:在名称以数字(ls,sed)开头的目录中查找编号最大的文件名

Jak*_*ake 12 bash shell ls sed

我有一个文件目录,如下所示:

001_something.php  002_something_else.php
004_xyz.php        005_do_good_to_others.php
Run Code Online (Sandbox Code Playgroud)

我最终想要创建一个新的空PHP文件,其名称以系列中的下一个数字开头.

LIST=`exec ls $MY_DIR | sed 's/\([0-9]\+\).*/\1/g' | tr '\n' ' '`
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我一个像这样的字符串:

LIST='001 002 004 005 '
Run Code Online (Sandbox Code Playgroud)

我想抓住005,递增1,然后使用该数字生成新的文件名.我怎么在BASH那样做?

bmb*_*bmb 13

你需要整个LIST吗?

如果不

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

会给你005部分和

printf "%03d" `expr 1 + $LAST`
Run Code Online (Sandbox Code Playgroud)

将打印序列中的下一个数字.


Dig*_*oss 10

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

所以,这是特定于bash的.下面是一个任何posix-shell-including-bash解决方案,我想我可以做一些更简单的事情.

$ 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
$ 
Run Code Online (Sandbox Code Playgroud)


Ide*_*lic 8

仅使用标准工具,以下将为您提供新文件的前缀(006):

ls [0-9]* | sed 's/_/ _/' | sort -rn | awk '{printf "%03d", $1 + 1; exit}'