可以rename
批量更改文件名。我设法用这个命令删除所有文件+
,并用下划线替换它们:
rename 's/\+/_/g' *
我可以使用以下方法将普通字母(如 a )改为 A 。
rename 's/a/A/g' *
但我无法重命名?
,不是这样/\?
,也不是这样/?
。
有没有办法解决文件名中的“?”?大多数 FTP 程序?
也无法重命名文件。Midnight Commander 失败了。到目前为止,我发现唯一有效的方法是:
mv ?myfile.txt myfile.txt
但这个命令不够灵活。我更喜欢批量重命名所有?
文件。
答案1
这个怎么样:
for filename in *
do
if [ "$filename" == *"?"* ]
then
mv "$filename" "$(echo $filename | tr '?' '-')"
fi
done
或者用一行代码来表达:
for filename in *; do mv "$filename" "$(echo $filename | tr '?' '-')" ; done
但是,看起来您的问题不是文件名中有问号,而是文件名包含ls
无法识别的字符。
答案2
它很丑陋,但是这里有一个使用 Python 的单行代码:
python -c 'import os, re; [os.rename(i, re.sub(r"\?", "-", i)) for i in os.listdir(".")]'
至于清理文件名,也许这会对您有所帮助:
python -c 'import os, re; [os.rename(i, unicode(i, "utf-8", "ignore")) for i in os.listdir(".")]'
答案3
使用此代码
for file in ./*;
do
OUT=`echo $file | sed 's/\r//g'`;
mv $file $OUT;
done
显然与 sed\r
匹配。?
答案4
这可能有点小题大做,但是使用此答案中提供的链接中的 bash 脚本,您可以使用其中的任何字符(包括问号、换行符、多字节字符、空格、破折号和任何其他允许的字符)重命名文件名: