Answers:
这里有两个问题。首先,您要声明变量“ i”,但使用不存在的“ $ file”。即使这样做,第二个问题是bash读取“从左到右”。这意味着它将首先看到“> $ file”,并将覆盖文件的内容。因此,如果使用正确的变量,则可能会丢失数据。
因此,一个错误使您免于另一个错误,您是幸运的,幸运的家伙:)
尝试类似的方法:
for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done
for i in *.txt ; do fold -w 1 $i > $i".folded"; done
。但是,那会使文件数量增加一倍,因此我不建议这样做。
sillytmpfile
要在ramdisk上的路径,则可以对其进行优化。在Linux上,这通常是/tmp
,/run/shm
也许其他人,请与mount | grep tmpfs
。
sed
也可能是一个选项,它在内部处理临时文件问题:
for i in *.txt ; do
sed -i 's#.#&\n#g' $file
done
fold
和sed
... time printf '%sabcdef\n' {1..1000000} |fold -w 1 >/dev/null
…… 由于原始换行符的处理方式,输出也有所不同。
wc
行计数结果:... fold (GNU coreutils)7.4 printf '%sabcdef\n' {1..1000000} |fold -w 1 |wc -l # -> 11888896
... GNU sed 版本4.2.1 printf '%sabcdef\n' {1..1000000} |sed 's#.#&\n#g' |wc -l # -> 12888896
sponge
从moreutils
包装,在文件的“就地”编辑,