Answers:
例如Spring\ 2011,转义空格,或使用引号'Spring 2011'。将来,在任何* NIX上使用带有空格的文件名通常是一个坏主意。
如果您有rename,可以使用以下方法:
rename ' ' '_' [filenames...]
rename2.23版)
如果您的计算机具有重命名命令,那么这会将当前工作目录中所有文件/目录中的所有空格更改为下划线:
rename 's/ /_/g' *
rename --version rename from util-linux 2.23.2。
如果您没有rename或不喜欢仅使用外壳程序:
for f in *\ *; do mv "$f" "${f// /_}"; done
细分:
*\ *选择名称中带有空格的所有文件作为for循环的输入。 "$f"很重要,因为我们知道文件名中有空格,否则它将显示为的2个以上参数mv。 ${f//str/new_str}是bash特定的字符串替换功能。的所有实例str均替换为new_str。for f in *\ *; do mv "$f" "${f// /_}"; done它可以正常工作
要以编程方式重命名N个文件,可以使用简单的bashfor循环。
#!/bin/bash
set -eux
# find all your files by using a `grep` pattern
pattern="insert_filename_pattern_here" # you must enter your filename pattern here
# create an array of filenames and split on newlines
IFS=$'\n'
tmp=($(ls | grep ${pattern}))
unset IFS
# for each filename
for filename in "${tmp[@]}"; do
# rename the filename to use "_" character instead of a " " character
mv -v "${filename}" "${filename// /_}"
done
如果文件名少于5个,则可以手动键入所有文件名,然后使用rename上述解决方案建议的命令。但是对我来说...我更喜欢编程解决方案...即使只有4个文件也是如此。
ps
如果您不熟悉Bash的参数扩展(即${filename// /_}),则可以使用以下rename命令:
if ((0)); then
mv -v "${filename}" "${filename// /_}"
else
rename ' ' '_' "${filename}"
fi
bashfor循环:在此处查看我的解决方案。