在OSX终端中,我们如何以字母数字顺序循环以数字开头的文件?
到目前为止,我有这个bash脚本,它以无明显顺序循环遍历文件:
FILES=/Users/somefolder/*.txt
for f in $FILES
do
echo $f
done
此外,我的文件以数字开头,例如,当我在-v
中使用ls
开关时,它们列为:
10_file.txt
11_file.txt
21_file.txt
2_file.txt
但是,我希望订单为:2_file.txt
,10_file.txt
,11_file.txt
和21_file.txt
答案 0 :(得分:1)
您正在按字母顺序排序。来自Bash Reference Manual # 3.5.8. Filename expansion:
3.5.8文件名扩展
分词后,除非设置了-f选项(参见Set 内置),Bash扫描每个单词的字符'*','?'和'['。 如果出现其中一个字符,则该字被视为a 模式,并替换为按字母顺序排序的文件名列表 匹配模式。
要获得数字排序,请使用while
循环,该循环由find
的结果提供,您可以按数字排序:
while IFS= read -r file
do
echo "$file --"
done < <(find /your/path -maxdepth 1 -mindepth 1 -type f -printf "%f\n" | sort -n)
那是:
find /your/path -maxdepth 1 -mindepth 1 -type f
获取/your/path
中的元素,这些元素是一个不经过子目录的文件。
printf "%f"
仅打印文件名。
sort -n
按数字排序
while ... do; ... done < <(command)
process substitution是否在while
循环中注入其输出。