Roxion Asked: 2021-03-27 21:52:05 +0800 CST2021-03-27 21:52:05 +0800 CST 2021-03-27 21:52:05 +0800 CST for loop wget目录创建错误 772 作为一个 Ubuntu 初学者。我正在尝试使用 wget2 从多个文本文件中批量下载链接。-P "$f" 创建带有 .txt 后缀的目录名。是否可以忽略 -P "$f" 的 .txt。任何修改建议。 for f in *.txt;do wget2 -i "$f" -P "$f";done bash wget 2 个回答 Voted agtoever 2021-03-27T22:45:07+08:002021-03-27T22:45:07+08:00 我认为 bash 中最优雅的方法是使用basename: $(basename "$filename" "$suffix") 你的脚本变成: for f in *.txt;do wget2 -i "$f" -P "$(basename "$f" .txt)";done 资源 Best Answer Kamil Maciorowski 2021-03-28T02:47:09+08:002021-03-28T02:47:09+08:00 ${f%.txt}扩展类似$f但.txt删除了后缀(如果有)。不要忘记像你正确引用一样双引号$f。 for f in *.txt; do wget2 -i "$f" -P "${f%.txt}"; done 语法是可移植的,它需要一个模式(比如文件名生成又名通配模式,而不是正则表达式)。例如${f%.*},无论扩展名是什么,都可以为您提供除扩展名之外的所有内容。这里的点是文字,星号是通配符。 POSIX 指定了一些这样的特性。Bash 支持它们等等。文档: POSIX 重击
我认为 bash 中最优雅的方法是使用basename:
你的脚本变成:
资源
${f%.txt}
扩展类似$f
但.txt
删除了后缀(如果有)。不要忘记像你正确引用一样双引号$f
。语法是可移植的,它需要一个模式(比如文件名生成又名通配模式,而不是正则表达式)。例如
${f%.*}
,无论扩展名是什么,都可以为您提供除扩展名之外的所有内容。这里的点是文字,星号是通配符。POSIX 指定了一些这样的特性。Bash 支持它们等等。文档: