使用 sedfile 在目录中进行递归更改时如何忽略空格?

How can I ignore whitespace when using a sedfile to make recursive changes in a directory?

我有一个包含 102 个子目录和 1590 个文件的目录。 我试图 运行 以下命令递归地针对所有文件,包括名称中带有空格的文件,以将 400 个标签的列表从 #tag 更改为 [[link]].

find . -name '*.md' | xargs sed -i -f sedfile *.md

它只适用于文件名中没有空格的文件。 sedfile 的格式为 s/#tag/[[link]]/g

sed: can't read ./4.Programming/G-Code/List: No such file or directory
sed: can't read of: No such file or directory
sed: can't read Common: No such file or directory
sed: can't read G-Code: No such file or directory
sed: can't read Commands: No such file or directory
sed: can't read and: No such file or directory
sed: can't read What: No such file or directory
sed: can't read They: No such file or directory
sed: can't read Mean.md: No such file or directory

文件名为 4.Programming/G-Code/List 常用 G 代码命令及其内容 Mean.md。

我以前用过

find . -type f -name "*.md" -print0 | xargs -0 sed -i '' -e 's/#tag/[[link]]/g'

单独进行更改,但我不希望手动更改 390+ 以上。

当我尝试将这两者结合起来时

find . -name '*.md' print0 | xargs -0 sed -i -f sedfile *.md

我明白了

find: paths must precede expression: `print0`

到目前为止,我在研究中发现的文章展示了如何对单个文件进行多次更改或对多个文件进行一次更改。 如何编辑两个示例中的任何一个以覆盖目录中的 *.md 文件?

有一个错字:您使用 print0 而不是 -print0

您也不需要 *.md,因为 xargs 正在提供文件名。

这应该有效:

find . -name '*.md' -print0 | xargs -0 sed -i -f sedfile

您也可以使用 -exec 代替:

find . -name '*.md' -exec sed -i -f sedfile {} +