我正在尝试对 ls 的输出进行排序。我要的顺序是这样的:
- 任何名称以 _ 开头的目录
- 任何名称以 + 开头的目录
- 所有软链接(可能包括一些点文件)
- 所有剩余的 .files
- 所有剩余的 .directories
- 其他一切
在这些“子列表”中,所有内容都按字母顺序排序。目前我多次使用 find 命令来查找符合上述条件的文件。之后,我将 find 的输出通过管道传递给 sort,然后将整个排序列表传递给 ls:
#!/bin/bash
find1=`find . -maxdepth 1 -name "_*" -type d -printf "%f\n" | sort`
find2=`find . -maxdepth 1 -name "+*" -type d -printf "%f\n" | sort`
find3=`find . -maxdepth 1 -type l -printf "%f\n" | sort`
find4=`find . -maxdepth 1 -name ".*" -type f -printf "%f\n" | sort`
find5=`find . -maxdepth 1 \( ! -name "." \) -name ".*" -type d -printf "%f\n" | sort`
find6=`find . -maxdepth 1 \( ! -name "_*" \) \( ! -name "+*" \) \( ! -name ".*" \) \( ! -type l \) -printf "%f\n"`
find="$find1 $find2 $find3 $find4 $find5 $find6"
ls -dfhlF --color=auto $find
这不处理任何包含空格的名称,总体上看起来有点过分。我确信有更好的方法来做到这一点。有任何想法吗?