2

这应该是一个简单的任务……!

我有一个包含许多 html 文件的目录。每个人都有一个名为 的类的 div crumb。我想在crumb. 稍后,我会将拆分文件的第二部分与新的开始部分连接起来。

所以我尝试了这个,分割所有的 html 文件 - 实际上是两个文件,暂时调用news.html-about.html在模式上crumb

find *.html -exec csplit - /crumb/ {} \;

但我有这样的回应:

csplit: ‘about.html’: invalid pattern
csplit: ‘news.html’: invalid pattern

为什么文件名被解释为模式?

4

2 回答 2

1

您可以通过添加“回声”来深入了解问题

find *.html -exec echo csplit - /crumb/ {} \;

这将显示

csplit - /crumb/ about.html
csplit - /crumb/ news.html

以交互方式运行这些命令会产生问题中的错误: csplit: 'about.html': invalid pattern

用 csplit man 检查,它显示用法:'csplit [OPTION]... FILE PATTERN...',表示第一个参数应该是文件名,后跟模式。从上述脚本生成的命令包括模式之后的文件名。

建议修复:

find *.html -exec  csplit  {} /crumb/ \;

# OR, with unique suffix for every file, and 3 digit suffix
find *.html -exec csplit --prefix {} --suffix-format='%03d' {} /crumb/ \;

这将执行:

csplit about.html /crumb/
csplit news.html /crumb/

无法判断这是否会生成请求的输出(根据需要拆分文件),因为未提供输入文件。

于 2019-10-03T15:56:42.947 回答
0

csplit命令的概要是

csplit [OPTION]... FILE PATTERN...

但你用

csplit - PATTERN FILE

where-是“从标准输入读取”(而不是文件),然后FILE被解释为模式。反而:

find -name '*.html' -exec csplit {} /crumb/ \;

注意*.html应该是单引号,或者shell在find看到它之前扩展它。

于 2019-10-03T15:52:18.060 回答