假设我有一组文件“ aab.md”,“ aac.md”,“ aad.md” ...“ csdw.md”。内容/文件名实际上位于(非拉丁)utf-8中。它们可以按字母顺序排序。
我如何在Bash中获取这些文件的子集,例如“ aad.md”及更高版本?
答案 0 :(得分:2)
declare -a files
while IFS= read -r -d $'\0' file; do
filename=${file##*/}
if [[ ! "$filename" < "aad.md" ]]
then
files=("${files[@]}" "$file")
fi
done < <(find . -name "*.md" -print0)
数组"${files[@]}"
现在应包含基本名称大于aad.md
的文件的路径。
这在bash中使用了许多鲜为人知的技术:数组,前缀替换,零终止记录(及其读取)和进程替换;所以不要犹豫,问是否有不清楚的地方。
请注意,bash
[[...]]
构造并不了解>=
运算符,因此我们需要即兴使用! ...<...
。
这几乎是纯bash,除了find
外没有其他命令。如果您接受外部命令,则$(basename $file)
比${file##*/}
更明显,但是那时候您最好使用awk
...,如果可以使用awk
,为什么呢?不是露比吗?
ruby -e "puts Dir['**/*.md'].select{|x| File.basename(x) >= 'aad.md'}"