通过去除已知前缀重命名多个文件夹,如果文件夹名称包含空格

Renaming multiple folders by stripping a known prefix, also if folder names contain whitespaces

我要将一些 IMAP 帐户移动到另一台服务器。旧服务器设置为添加前缀 .INBOX。到每个文件夹,但不是新文件夹。所以我尝试重命名所有文件夹,删除 .INBOX。前缀。

我在 bash 中做了什么:

for name in .INBOX.*;
do
newname="$(echo "$name" | cut -c8-)";
mv '$name' '$newname';
done

但是这个脚本只重命名了不包含空格的文件夹。带有空格的会导致错误消息。

有什么诀窍?

使用引号。在下面的示例中,我更喜欢使用 while read

示例

$ ls -l *.txt
-rw-rw-r-- 1 ftpcpl ftpcpl 0 Jul 24 11:36 hello and goodbye.txt
-rw-rw-r-- 1 ftpcpl ftpcpl 0 Jul 24 11:36 hello.txt
$ echo "hello.txt" > lista.txt
$ echo "hello and goodbye.txt" >> lista.txt
$ more lista.txt
hello.txt
hello and goodbye.txt
$ while IFS= read -r file; do mv -- "$file" "$file".new ; done < lista.txt
$ ls -l *.new
-rw-rw-r-- 1 ftpcpl ftpcpl 0 Jul 24 11:36 hello and goodbye.txt.new
-rw-rw-r-- 1 ftpcpl ftpcpl 0 Jul 24 11:36 hello.txt.new
$