假设在给定的目录中我得到了
tzury@x200:~/Desktop/sandbox$ ls -l
total 20
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P000
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P001
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P002
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P003
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P004
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N01.P000
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N01.P001
drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N01.P002
Run Code Online (Sandbox Code Playgroud)
我寻求一种bash方法来获取其名称大于或小于给定参数的文件列表,例如:
$ my_finder lt N00.P003
Run Code Online (Sandbox Code Playgroud)
将返回N00.P000
, N00.P001
并且N00.P002
$ my_finder gt N00.P003
Run Code Online (Sandbox Code Playgroud)
应返回N00.P004
, N01.P000
,N01.P001
和N01.P002
我正在考虑迭代for name in $(ls)
,while $name != $2
但相信有更优雅的方法
永远不要迭代ls
输出!
这是我的建议:
for fn in *; do test "$fn" -$1 "$2" && echo "$fn"; done
Run Code Online (Sandbox Code Playgroud)
编辑:
对不起。仅当 $fn 和 $2 为数字时,上述方法才有效。您必须将 -$1 替换为 $op,并在循环前面添加一个选择器。op="<"
或分别op=">"
取决于 $1 是lt
或gt
。