Bash,在每个文件的末尾附加一行

时间:2010-11-04 21:45:09

标签: bash

我在dir中有文件。 我需要在每个文件的末尾附加一个新行和文件名。

4 个答案:

答案 0 :(得分:7)

这应该做:

for f in *; do echo >> $f; echo $f >> $f; done
  • 首先回显一个新行,然后回显文件名。

  • >>说“附加在文件的末尾”。

答案 1 :(得分:0)

编辑:aioobe的答案已经更新,以显示我第一次回答此问题时没有看到的-e标志。因此,我现在只是展示一个包含目录以及如何消除目录名称的示例:

#!/bin/bash
for fn in dir/* 
do
  shortname=${fn/#*\//}
  echo -e "\n$shortname" >> $fn
done

如果你想要目录名,请取出shortname=${fn/#*\//}行,并在echo中用$ fn替换$ shortname。

答案 2 :(得分:0)

xargs进行循环:

# recursive, includes directory name
find -type f -print0 | xargs -0 -I% bash -c 'echo -e "\n%" >> %'

# non-recursive, doesn't include directory name
find -maxdepth 1 -type f -exec basename {} \; | xargs -I% bash -c 'echo -e "\n%" >> %'

# non-recursive, doesn't include directory name
find -maxdepth 1 -type f -printf "%f\0" | xargs -0 -I% bash -c 'echo -e "\n%" >> %'

# recursive, doesn't include directory name
find -type f -print0 | xargs -0 -I% bash -c 'f=%; echo -e "\n${f##*/}" >> %'

答案 3 :(得分:0)

使用ex(或vim)的另一种方法:

ex -c 'args **/*' -c 'set hidden' -c 'argdo $put =bufname(".")' -c 'wqa'