回答:
sed
それはより簡潔です。
$ find -maxdepth 1 -type f | sort | sed '/^\.\/reference/,$d'
つまり、(ソート後に)参照行(またはそれ以上)と最後の行に続くすべての行を削除します。
ここでは、sed 'd'コマンドがアドレス範囲とともに使用されています。ここで、 '/ ^。/ reference /'は範囲の最初と '$'です。(そして、アドレスとしての「$」は最後の行を意味します。)
通常のファイルのみを選択し、一致するものからさらに選択するために.
glob修飾子を使用する必須のzsh回答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}"'"'