Answers:
有了sed
它更简洁:
$ find -maxdepth 1 -type f | sort | sed '/^\.\/reference/,$d'
这意味着(排序后)删除参考行(或更大行)以及最后一行之后的所有行。
sed'd'命令在这里与地址范围一起使用,其中'/^./reference/'是范围的开始,而'$'是范围的结束。(“ $”作为地址表示最后一行。)
强制性zsh答案,使用.
glob限定符仅选择常规文件并e
在匹配项中进一步选择:
echo *(.e\''[[ $REPLY > reference ]]'\')
例如。script-name "$HOME" "reference"
... find
并不总是输出前导./
,如find bin
或的情况find /tmp
。因此,如果只需要文件基本名称,则可以使用。
更新:添加了tolower()以允许不区分大小写的比较,从而产生问题中提到的字母排序规则...
#!/bin/bash
dir="$1"; ref="$2"
find "$dir" -maxdepth 1 -type f -printf "%f\n" | awk -v"ref=$ref" 'tolower($0) < tolower(ref)'
如果需要对它进行排序,只需将其传送到sort
after即可awk
。
$0 < ref
并且可以正常工作,但是由于find的输出中没有空格,因此$ 2字段不存在。我想念什么吗?
awk '$0 >= "'"${FROM}"'" && $0 <= "'"${TILL}"'"'