假设我正在尝试将文件从“aa -- bb.pdf”形式移动到“bb -- aa.pdf”。
显而易见的方法是:
for f in *;
do
mv $f $(echo "$f" | sed -E 's/(.\*) -- (.\*)(\..\*)/\2 -- \1\3/');
done
我需要在一些参数周围添加单引号,因为各种参数内部都有空格,无法正确提取,所以它实际上应该看起来更像这样:
for f in *;
do
$(echo mv "'"$f"'" "'"$(echo "$f" | sed -E 's/(.\*) -- (.\*)(\..\*)/\2 -- \1\3/')"'");
done
但无论我这样做,我得到的只是 mv 的标准用法独奏会:用法:mv [-f | -i | -n] [-v] source target
等。
当我将它输出到屏幕时,它看起来很棒:
mv 'aa -- bb.pdf' 'bb -- aa.pdf'
但无论我尝试什么变体,它只是背诵用法(大概告诉我我的语法有问题),我不知道为什么。
有任何想法吗?