微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在shell中按名称sorting目录内容包括隐藏文件

有没有一种很好的方法来sorting目录内容包括隐藏的文件)在shell? 基本上我希望能够在我的GUI文件pipe理器中完成ls目录。 在一个典型的目录中,输出是这样的:

.a_hidden_​​dir

.b_hidden_​​dir

.c_hidden_​​dir

stringpattaren匹配使用awk

Sed | awk在匹配下一行后删除

Linux / Unix bash基本脚本awk / sed

从长行删除一个字段的位置

如何从给定的事件中删除匹配的模式

a_dir

b_dir

c_dir

.a_hidden_​​file

.b_hidden_​​file

.c_hidden_​​file

一份文件

b_file

C_FILE

当然, ls有--group-directories-first选项,但是这只能让我们成为sort一部分,因为sort忽略了领先. ,它不会将隐藏的文件排在最前面。

我希望能够以这种方式从ls , find或其他path列表中sorting输出。 有谁知道这样做的好方法 – 也许sort -k KEYDEF ?

现在我正在做这样的事情(它假定目录名称附有一个斜杠):

pathsort(){ input=$(cat) ( awk '/^..+/$/' <<<"$input" | sort awk '/^[^.].+/$/' <<<"$input" | sort awk '/^..+[^/]$/' <<<"$input" | sort awk '/^[^.].+[^/]$/' <<<"$input" | sort ) | sed 's//$//' } ls -Ap | pathsort

上面的代码可以完成这项工作,但这并不理想。 请告诉我有更好的办法

拆分string(例如与bash),但跳过它的一部分

awk – 提取唯一出现的字段1,在输出的同一行上追加字段2的多个实例

AWK根据两个条件删除重复的行

如果只有非空字段被双引号括起来,怎样才能读取CSV文件

awk将CSV文件(加载到oracle)的特定值转换为不带引号| awk | unix

Jonathan Leffler在评论中提出了一个简单而实用的解决方案:设置本地环境变量LANG=C 在我的系统上,认的LANG=en_US.UTF-8导致不需要的路径名排序特征。 C显然是参考按ASCII字符集进行字节排序的。 设置LANG=C的结果是,'dotfiles'(包括目录)被排序到顶部。 注意也可以使用LC_ALL=C ,因为LC_ALL是LANG和其他LC_*变量的超集。 总而言之,如果您想要一致的排序体验,强烈建议将语言环境设置为C来排序命令。

以下是所需路径名排序层次结构的最终解决方案(dotfile dirs> normal dirs> dotfile files> normal files):

LC_ALL=C ls -A --group-directories-first

注意:这也包括文件和目录的符号链接

同样,对任何其他的路径名输出源进行排序:

findtool | LC_ALL=C sort

有趣的是,我认为排序目录是最简单的:

ls -1d .*/; ls -1d */

文件很难从目录中分离出来,你需要使用find:

(find . -maxdepth 1 -type f -name '.*' -printf '%Pn' | sort); (find . -maxdepth 1 -type f -not -name '.*' -printf '%Pn' | sort)

把整个事情放在一起:

alias lss=" ls -1d .*/; # Hidden directories ls -1d */; # normal directories find . -maxdepth 1 -type f -name '.*' -printf '%Pn' | sort; # Hidden files find . -maxdepth 1 -type f -not -name '.*' -printf '%Pn' | sort # normal files "

一个警告:还有其他项目,这将错过,如链接和设备。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐