![bash 脚本从文件名中删除特殊字符,然后将新名称作为变量传递](https://linux22.com/image/177619/bash%20%E8%84%9A%E6%9C%AC%E4%BB%8E%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E5%88%A0%E9%99%A4%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%EF%BC%8C%E7%84%B6%E5%90%8E%E5%B0%86%E6%96%B0%E5%90%8D%E7%A7%B0%E4%BD%9C%E4%B8%BA%E5%8F%98%E9%87%8F%E4%BC%A0%E9%80%92.png)
我想在循环中一一处理文件名之前删除它们。下面的脚本是一个示例,我不知道如何获取"$new_filename"
for file in *.txt
do rename -n 's/[^a-zA-Z0-9_-]//g' "$file"
process "$new_filename"
done
答案1
rename
如果您要使用 shell 循环,据我所知,没有什么理由在这里使用。所以也许像
for file in *.txt; do
printf -v new_filename '%s' "${file//[^a-zA-Z0-9_-]}"
echo mv -- "$file" "$new_filename"
process "$new_filename"
done
添加echo
作为rename
命令-n
标志的等效项。
(您可能希望添加.
到包含的字符列表中,特别是因为您选择的文件名以 结尾.txt
)。