首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用find和csplit的参数无效

使用find和csplit的参数无效
EN

Stack Overflow用户
提问于 2019-10-03 23:34:25
回答 2查看 340关注 0票数 2

这应该是一项简单的任务...!

我有一个目录,里面有许多html文件。每一个都有一个名为crumb的类的div。我想在crumb上将文件一分为二。稍后,我将把分割文件的第二部分与一个新的开始部分连接起来。

因此,我尝试这样做,在模式crumb上拆分所有的html文件--实际上是暂时称为news.htmlabout.html的两个文件

代码语言:javascript
复制
find *.html -exec csplit - /crumb/ {} \;

但我有这样的回应:

代码语言:javascript
复制
csplit: ‘about.html’: invalid pattern
csplit: ‘news.html’: invalid pattern

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-03 23:56:43

您可以通过添加'echo‘来深入了解这个问题

代码语言:javascript
复制
find *.html -exec echo csplit - /crumb/ {} \;

这将会显示

代码语言:javascript
复制
csplit - /crumb/ about.html
csplit - /crumb/ news.html

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

使用csplit man检查,它显示了用法:'csplit OPTION... FILE PATTERN...',这表明第一个参数应该是文件名,然后是模式。从上面的脚本生成的命令在模式之后包含文件名。

建议的修复:

代码语言:javascript
复制
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/ \;

它将执行:

代码语言:javascript
复制
csplit about.html /crumb/
csplit news.html /crumb/

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

票数 1
EN

Stack Overflow用户

发布于 2019-10-03 23:52:18

csplit命令的概要如下

代码语言:javascript
复制
csplit [OPTION]... FILE PATTERN...

但是你使用了

代码语言:javascript
复制
csplit - PATTERN FILE

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

代码语言:javascript
复制
find -name '*.html' -exec csplit {} /crumb/ \;

请注意,*.html应该是单引号的,否则shell会在find看到它之前将其展开。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58222495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档