修改部分文件添加文件名

修改部分文件添加文件名

我的目录中有一堆文本(数百个 txt)。它们每个都有一个唯一的文件名。我想将每个文件的文件名插入到各个文件的第一行。我怎样才能使用 bash 脚本做到这一点?

答案1

标准方法是使用临时文件,但如果将文件括cat$()括号中,则可以就地更改文件:

for file in *.txt; do echo "$file"$'\n'"$(cat -- "$file")" > "$file"; done

答案2

您可以使用标准文本编辑器:

for f in *; do printf '%s\n' 1i "$f" . w q | ed "$f"; done

答案3

for file in *; do
 (echo "$file"; cat -- "$file") > "$file.new"
 mv -- "$file.new" "$file"
done

此循环遍历所有文件,回显每个文件名并附加文件的内容,然后将其全部放入带有附加后缀.new.

您为每个现有文件创建一个新文件,因此之后必须重命名这些文件。

您可以将结果放入新目录,然后删除旧目录:

mkdir new
for file in *; do
 (echo "$file"; cat "$file") > "new/$file"
done

您还可以使用带有选项的 sed-i 对文件进行就地编辑。 Perl 也允许这样做。这完全取决于您还有哪些其他可用工具。 :)

相关内容