这应该是一项简单的任务...!
我有一个目录,里面有许多html文件。每一个都有一个名为crumb的类的div。我想在crumb上将文件一分为二。稍后,我将把分割文件的第二部分与一个新的开始部分连接起来。
因此,我尝试这样做,在模式crumb上拆分所有的html文件--实际上是暂时称为news.html和about.html的两个文件
find *.html -exec csplit - /crumb/ {} \;但我有这样的回应:
csplit: ‘about.html’: invalid pattern
csplit: ‘news.html’: invalid pattern为什么文件名被解释为一种模式?
发布于 2019-10-03 23:56:43
您可以通过添加'echo‘来深入了解这个问题
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-03 23:52:18
csplit命令的概要如下
csplit [OPTION]... FILE PATTERN...但是你使用了
csplit - PATTERN FILE其中-是“从标准输入读取”(而不是文件),然后FILE被解释为模式。而是:
find -name '*.html' -exec csplit {} /crumb/ \;请注意,*.html应该是单引号的,否则shell会在find看到它之前将其展开。
https://stackoverflow.com/questions/58222495
复制相似问题