如何在脚本中对 find 命令的输出进行排序

露营0

我有以下简单的脚本来查找在过去 N 天内添加的所有目录(深度为 2)...

#!/bin/bash
DAYS_PRIOR=180
DIR='/mydir'
FILES=`find $DIR -mindepth 2 -maxdepth 2 -type d -mtime -$DAYS_PRIOR -printf '%f\\\n'`
echo
echo "Files added in the last $DAYS_PRIOR days:"
echo
echo -e $FILES
echo

为了让它添加换行符,我必须双重转义 printf 并使用echo -e. 这对我来说似乎很奇怪,但这是我可以让它在输出上每行打印一个目录的唯一方法。

到目前为止,一切正常,我按预期得到了目录列表。现在我想按字母顺序对列表进行排序。我尝试将 find 命令中的 printf 更改为...

FILES=`find <xxx> -printf '%f\\\n' | sort`

但是,这不会对目录名称进行排序。根据其他帖子,我尝试了以下内容..

FILES=`find <xxx> -printf %f\\\n | sort -t '\0' | awk -F '\0' '{print $0; print "\\\n"}'`

这非常接近,但在每行的开头留下了一个额外的空间,看起来非常尴尬。

是否有一种简单的方法可以为原始find命令添加排序

戈登戴维森

第一:双引号你的变量引用!当您使用 时echo -e $FILES,变量FILE的值会根据空格(空格、制表符和换行符)拆分为“单词”,然后将echo这些单词与它们之间的空格粘在一起。这具有将换行符转换为空格的效果。为了在最后结束换行符,您必须使用\n而不是真正的换行符,并使用echo -e来转换它。只需使用真正的换行符,并在变量引用周围加上双引号以避免所有这些混乱:

FILES=$(find "$DIR" -mindepth 2 -maxdepth 2 -type d -mtime "-$DAYS_PRIOR" -printf '%f\n')
# ...
echo "$FILES"

请注意,我在所有变量引用周围都加了双引号,因为这几乎总是一个好主意。我还使用了$( )而不是反引号——它更容易阅读,并且避免了反引号所具有的一些解析奇怪之处。

无论如何,使用这种格式,您在整个过程中都使用了正确的换行符,因此管道sort应该按预期工作。

顺便说一句,我还建议从大写变量名称切换到小写或混合大小写名称,因为有一堆具有特殊含义的全大写名称,如果您不小心使用其中一个名称,可能会发生坏事。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对find的输出进行排序?

如何对变量的输出进行排序?

如何防止`ls`对输出进行排序?

如何对`ls`的输出进行排序?

如何对git status输出进行排序

在Android中对Json输出进行排序

如何在R中对SessionInfo()的输出进行排序?

如何在Django中对模型输出进行排序?

文本处理-如何对具有不同目录中重复文件名的find的输出进行唯一排序?

在 Bash 中,如何对 JQ 的 Echo 输出进行排序?

使用联合时如何对数组的输出进行排序

如何对grep -rc的输出进行反向排序

如何对存储桶聚合阶段的输出进行排序?

如何正确使用jq对json输出进行排序

如何根据序号的长短对不同的输出进行排序?

如何对2个相同数组数据的输出进行排序

如何按日期对SVN LS -R输出进行排序

如何使用mongodb对$ group聚合输出进行排序

NLTK中的FreqDist不对输出进行排序

在 Google Apps Script 中对 getValues() 的输出进行排序

PHP如何在5x5表中对数组的输出进行排序?

根据正则表达式对Mongodb find()输出进行排序

我可以在bash脚本中与OSX`say`命令的输出进行交互吗?

如何在我的情况下对json输出进行排序

如何对 git 分支输出进行版本排序(与通常的字母/字典排序相比)

将mtime添加到grep -c输出中,并按mtime对输出进行排序

对linux命令的输出进行排序

如何遍历字典列表并根据 Bash 中的键对输出进行排序?

在分析Python脚本时按percall对cProfile输出进行排序