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)
仅使用标准工具,以下将为您提供新文件的前缀(006):
ls [0-9]* | sed 's/_/ _/' | sort -rn | awk '{printf "%03d", $1 + 1; exit}'