我目前正在使用一个简短的 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
.