在 Ubuntu 上,我在一棵名为“output.txt”的树中有一堆文件。对于每个文件,我想用“排序”按字母顺序对行进行排序。我考虑过
寻找 。-name output.txt -exec 排序{} \;
但这会将排序的行输出到控制台,而不是更新我想要的原始文件。
find . -name output.txt -exec sort{} -o{} \;
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 的就地选项一样。
尝试这个
csh <enter>
foreach i ( `find . -type f -name output.txt -print`) <enter>
cat $i | sort > $.sorted <enter>
end <enter>
您将生成文件的排序副本。
我没有大量使用Linux,所以我可能会弄错,但你不应该能够控制它StdOut
吗?
find . -name output.txt -exec sort{} \ > output.txt