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'
我正在尝试获取所有 *.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'