提问人:Tom 提问时间:8/8/2022 最后编辑:E_net4Tom 更新时间:8/11/2022 访问量:66
如何处理命令参数中的异常文件名?
How do I deal with unusual filenames in a command's parameters?
问:
我有一个文件(“列表”),其中包含大量文件名,其中包含各种字符组合,例如:
-sensei
我正在使用以下脚本来处理此文件列表:
#!/bin/bash
while read -r line
do
html2text -o ./text/$line $line
done < list
这给了我“无法打开输入文件”错误。 处理这些文件名的正确方法是什么,以防止任何错误?
我已经更改了上面的示例列表,现在只包含一个文件名(在许多文件中),无论我如何引用或不引用它,它都不起作用。
#!/bin/bash
while read -r line
do
html2text -o "./text/$line" "$line"
done < list
我得到的错误是:
Unrecognized command line option "-sensei", try "-help".
因此,这个问题并不能解决此问题。
答:
-1赞
Tenobaal
8/8/2022
#1
您确定文件存在吗?通常,您的脚本应该没有问题。例如:
#!/bin/bash
while read -r line
do
touch ./text/$line
done < $1
ls -l /tmp/text
对我来说效果很好(使用您的示例输入)。Bash 应该为你逃避它们。你在正确的目录中吗?如果您确定文件存在,则 html2text 有问题。
此外,请确保输入文件中没有尾随空行。
2赞
Fravadona
8/11/2022
#2
像这样的东西应该可以解决你的问题(除非文件列表有 CRLF 行结尾):
while IFS='' read -r file
do
html2text -o ./text/"$file" -- "$file"
done < filelist.txt
笔记:
IFS='' read -r
当您想要准确捕获线条时,是必需的- 大多数命令都支持发出选项结束的信号;无论以下参数是什么,它们都不会被视为选项。顺便说一句,以 开头的文件名的另一个常见解决方法是在它们前面添加。
--
-
./
评论
"$line"
html2text
html2text -o "./text/$line" -- "$line"