bash : 首先对 "find" 输出文件进行排序

bash : sort "find" output files first

我正在尝试获取所有 *.tex 文件的相对路径列表以获得正确的编译列表。

我按以下方式构建我的目录:每个包含其他部分的 *.tex 文件都有一个同名文件夹,这使得结构看起来像这样:

./section1/ 
./section2/
./section1.tex
./section2.tex

因此每个文件夹内还有其他 *.tex 文件,最终还有其他目录,以便我保持清晰的层次结构。

我想获得以下输出并将其打印到文件中(假设为“toc.txt”):

./section1.tex

./section1/subsection1_1.tex
./section1/subsection1_2.tex
./section1/subsection1_3.tex


./section2.tex

./section2/subsection2_1.tex
./section2/subsection2_2.tex
./section2/subsection2_3.tex

我尝试了以下命令:

find . -name '*.tex' -print | sort

但它给了我以下结果:

./section1/subsection1_1.tex
./section1/subsection1_2.tex
./section1/subsection1_3.tex
./section1.tex
./section2/subsection2_1.tex
./section2/subsection2_2.tex
./section2/subsection2_3.tex
./section2.tex

我不得不说我真的不想手动重新排序每一行来获取这个 toc 文件...

你有什么想法吗? :-)

这与整理顺序有关。这会起作用。

find . -name '*.tex' -print | LC_COLLATE=C sort

并且,只是为了好玩,这有点疯狂,但是如果您只是将 . 替换为在字母表中排序较高但在您的文件名中找不到的内容,请排序,然后反转改造,它的工作原理。例如

find . -name '*.tex' -print | sed -e 's/\./aaaa/g' | sort | sed -e 's/aaaa/\./g'