我有十个文件:firstFile.txt,...,tenthFile.txt
在文件的最后一行,我想附加文件名。
即对于第一个,最后一行将是“firstFile”
我想用一行代码执行此操作
答案1
使用zsh
, 将文件名删除其扩展名(r
oot 名称)的行添加到每个非隐藏的末尾常规的文件(不是目录、符号链接、管道、设备...):
for f (*(N.)) print -r - $f:r >> $f
使用sh
/ bash
(也可以使用zsh
):
for f in *; do
[ -f "$f" ] && [ ! -L "$f" ] && printf '%s\n' "${f%.*}" >> "$f"
done
请注意,这些循环的退出状态将是这些循环中最后运行的 and-or 列表的退出状态。
要使退出状态仅在脚本无法更新文件时才不成功,您可以执行以下操作:
#! /bin/zsh -
ret=0
for f (*(N.)) print -r - $f:r >> $f || ret=$?
exit $ret
或者:
#! /bin/sh -
ret=0
for f in *; do
[ -f "$f" ] || continue
[ -L "$f" ] && continue
printf '%s\n' "${f%.*}" >> "$f" || ret="$?"
done
exit "$ret"
答案2
bash-4.4$ touch firstFile.txt
bash-4.4$ touch secondfile.txt
bash-4.4$ ls * | while read fn ; do echo "$fn" >>"$fn" ; done
bash-4.4$ cat *
firstFile.txt
secondfile.txt
显然,您可能需要更改*
以适合您的特定情况。ls
对于更复杂的情况,您可能需要考虑更改 a find
。
编辑:如果您想删除“.txt”,请更改echo "$fn"
为echo "${fn%%.txt}"
上面的行。
(我知道ls *
这很奇怪,但星号在示例中充当位置标记)