如何用下划线替换文件名中的空格

如何用下划线替换文件名中的空格

所以我试图重命名目录中的所有文件,以便它们没有空格。我正在做一个 bash 脚本,我真的不知道该怎么做,我尝试了各种引号和转义,但我不确定什么组合可以工作。

#!/bin/bash
#change empty spaces in filenames to underlineos
lsarray="$(echo "$(pwd)""/*")"
for i in $lsarray
do
    if [[ $i == *" "* ]] 
    then
        line=$(echo $i | sed 's/ \+/\_/g')
        j=$(echo $i | sed 's/ \+/\\ /g')
        mv "$j" "$line"
        echo "$i"
        echo "$j"
        echo "$line"
        fi
done

因为 mv 需要“特殊变量扩展”,所以我在上面使用双引号。任何提示表示赞赏。

答案1

bash将所有文件放入文件夹中。

for name in *; do mv "$name" "${name// /_}"; done

替换为(${name/pattern/replace}patternreplaceBash 参数扩展)。如果模式以/(此处模式为/+ )开头Space,它将替换所有出现的情况。然后用替换的空格mv将文件重命名为name新名称。

答案2

Perl 的重命名为:

rename 'y/ /_/' *

相关内容