在Ubuntu上,我在树中有一堆文件,都叫做'output.txt'。对于每个文件,我想用'sort'按字母顺序对行进行排序。我考虑了
找到。 -name output.txt -exec sort {} \;但是这会将排序的行输出到控制台,而不是更新我想要的原始文件。
答案 0 :(得分:3)
find . -name output.txt -exec sort{} -o{} \;
答案 1 :(得分:1)
的Fortran,
我会以不同的方式做到这一点,我不会将文件排序为自己。只需要在排序后添加任何新的文件。这就是我要做的事情:
#!/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