Answers:
例如Spring\ 2011
,转义空格,或使用引号'Spring 2011'
。将来,在任何* NIX上使用带有空格的文件名通常是一个坏主意。
如果您有rename
,可以使用以下方法:
rename ' ' '_' [filenames...]
rename
2.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个文件,可以使用简单的bash
for循环。
#!/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
bash
for循环:在此处查看我的解决方案。