有没有一种很好的方法来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] 举报,一经查实,本站将立刻删除。