使用 find 和 csplit 的无效参数
Invalid parameters using find and csplit
这应该是一个简单的任务...!
我有一个包含多个 html 文件的目录。每个人都有一个 div 叫一个 class 叫 crumb
。我想在 crumb
上将文件一分为二。稍后,我会将拆分文件的第二部分与新的开始部分连接起来。
所以我尝试了这个,拆分所有 html 文件 - 实际上是两个名为 news.html
和 about.html
的文件 - 在模式 crumb
上:
find *.html -exec csplit - /crumb/ {} \;
但我有这样的回应:
csplit: ‘about.html’: invalid pattern
csplit: ‘news.html’: invalid pattern
为什么文件名被解释为一种模式?
csplit
命令的概要是
csplit [OPTION]... FILE PATTERN...
但是你用
csplit - PATTERN FILE
其中-
是"read from standard input"(而不是文件),然后FILE
被解释为一个模式。相反:
find -name '*.html' -exec csplit {} /crumb/ \;
注意 *.html
应该是单引号,或者 shell 在 find
看到它之前展开它。
您可以通过添加 '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/
无法判断这是否会生成请求的输出(根据需要拆分文件),因为未提供输入文件。
这应该是一个简单的任务...!
我有一个包含多个 html 文件的目录。每个人都有一个 div 叫一个 class 叫 crumb
。我想在 crumb
上将文件一分为二。稍后,我会将拆分文件的第二部分与新的开始部分连接起来。
所以我尝试了这个,拆分所有 html 文件 - 实际上是两个名为 news.html
和 about.html
的文件 - 在模式 crumb
上:
find *.html -exec csplit - /crumb/ {} \;
但我有这样的回应:
csplit: ‘about.html’: invalid pattern
csplit: ‘news.html’: invalid pattern
为什么文件名被解释为一种模式?
csplit
命令的概要是
csplit [OPTION]... FILE PATTERN...
但是你用
csplit - PATTERN FILE
其中-
是"read from standard input"(而不是文件),然后FILE
被解释为一个模式。相反:
find -name '*.html' -exec csplit {} /crumb/ \;
注意 *.html
应该是单引号,或者 shell 在 find
看到它之前展开它。
您可以通过添加 '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/
无法判断这是否会生成请求的输出(根据需要拆分文件),因为未提供输入文件。