按字母顺序进行查找搜索

按字母顺序进行查找搜索

我目前正在使用一个简短的 find 命令来搜索多个目录(和子目录)中以“tex”结尾的文件,然后将它们放入一个连贯的文本中。我使用的命令是这个:

find . -name '*.tex' -exec cat {} \; > blub.txt

但是,find 命令不会按照我希望的方式搜索文件夹。它跳跃了很多,而不是首先抓取文件夹“2011”,而是以“2013”​​等开头。有没有办法修改它,以便它以 2011 开头,以及其中的子目录,即以文件夹“01” -一月”,然后是“二月 2 日”等。

答案1

如果您没有太多的总目录,您可以find通过在命令行中提供所有路径来强制按顺序遍历路径:

shopt -s globstar
find **/ -name '*.tex' -exec cat {} \; > blub.txt

(使用 bash 语法启用递归**glob)。全局按自然排序顺序扩展,因此年份将首先排序,然后每个数字前缀的月份将在每年内排序。尾部斜杠要求 bash 仅返回目录,以便find查找文件。

或者,如果您有一个作为子目录的年份列表,您可以循环遍历:

for year in *
do
  find "$year"/* -name '*.tex' -exec cat {} \;
done > blub.txt

这将每年的 12 个月扩展到每个循环中,再次强制find按顺序处理它们。

答案2

像这样的事情可能会起作用:

find -type f -name \*.tex -print0 | sort -z | xargs -0 cat >> blub.txt

print0的选项使用find字符NUL来分隔找到的对象,可以利用该字符sort -z将它们按词法顺序排列;然后我们将该有序列表输入到xargs.

相关内容