如何以递归方式按字母顺序对一堆文件进行排序

时间:2009-06-03 13:12:17

标签: linux sorting find

在Ubuntu上,我在树中有一堆文件,都叫做'output.txt'。对于每个文件,我想用'sort'按字母顺序对行进行排序。我考虑了

找到。 -name output.txt -exec sort {} \;

但是这会将排序的行输出到控制台,而不是更新我想要的原始文件。

4 个答案:

答案 0 :(得分:3)

find . -name output.txt -exec sort{} -o{} \;

答案 1 :(得分:1)

的Fortran,

我会以不同的方式做到这一点,我不会将文件排序为自己。只需要在排序后添加任何新的文件。这就是我要做的事情:

  • mirir具有'output.txt'文件的dir树并将排序后的文件放在那里
像这样:

#!/bin/bash 

LIST=`find $1 -name output.txt`

for i in $LIST ; do
        X=`dirname $i`
        mkdir -p "sorted/$X"
        sort "$i" -o "sorted/$i"
done

以上需要一点点润色,mkdir应该有一个'if'并且应该检查$ 1是否理智

给你这个:

一部开拓创新:

mytest
mytest/ccc
mytest/ccc/f
mytest/ccc/f/output.txt
mytest/ccc/d
mytest/ccc/d/output.txt
mytest/ccc/e
mytest/ccc/e/output.txt
mytest/bbb
mytest/bbb/f
mytest/bbb/d
mytest/bbb/e
mytest/aaa
mytest/aaa/f
mytest/aaa/f/output.txt
mytest/aaa/d
mytest/aaa/d/output.txt
mytest/aaa/e
mytest/aaa/e/output.txt

输出:

sorted
sorted/mytest
sorted/mytest/ccc
sorted/mytest/ccc/f
sorted/mytest/ccc/f/output.txt
sorted/mytest/ccc/d
sorted/mytest/ccc/d/output.txt
sorted/mytest/ccc/e
sorted/mytest/ccc/e/output.txt
sorted/mytest/aaa
sorted/mytest/aaa/f
sorted/mytest/aaa/f/output.txt
sorted/mytest/aaa/d
sorted/mytest/aaa/d/output.txt
sorted/mytest/aaa/e
sorted/mytest/aaa/e/output.txt

最后一件事我认为排序输出文件被写入tmp文件,然后在排序完成后重命名,否则输出文件可能会在读取所有内容之前截断输入文件。就像sed的inplace选项一样。

答案 2 :(得分:0)

试试这个

csh <enter>

foreach i ( `find . -type f -name output.txt -print`) <enter>
   cat $i | sort > $.sorted <enter>
end <enter>

您将生成文件的已排序副本。

答案 3 :(得分:-1)

我没有经常使用Linux,所以我可能会弄错,但你不应该用StdOut来控制它吗?

find . -name output.txt -exec sort{} \ > output.txt