【发布时间】:2013-08-30 10:23:20
【问题描述】:
我正在尝试对 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
这不处理任何包含空格的名称,总体上看起来有点过分。我确信有更好的方法来做到这一点。有什么想法吗?
【问题讨论】:
-
在我的脑海中,我建议
ls或ls -l然后每次都搜索你想要(或不想要)的文件。请记住,grep -v将打印 不 匹配模式的文件。您可以使用ls -l的输出来查找目录和链接。 -
解析
ls的输出是个坏主意。在最坏的情况下,会有包含换行符的文件名,在这种情况下,您无法区分这些换行符和ls插入的用于格式化的换行符。 -
@AdamLiss 你能详细说明一下吗?当我只想列出那些文件时,您的意思是 grep ls 的结果并搜索特定模式吗?我希望有一个强大的解决方案来按特定顺序列出目录中的内容。即输入 ll($HOME/bin 中的脚本名称)并以长列表格式(ls -al 之类的)显示目录的内容,但列表以特定方式组织。使列表更具可读性。