繁体   English   中英

bash:for循环中的mv仅记录用法

[英]bash: mv within for loop just recites usage

假设我正在尝试将文件从“ 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 [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source target

当我将其输出到屏幕上时,看起来很棒:

mv 'aa -- bb.pdf' 'bb -- aa.pdf'

但是,无论我尝试哪种变化,它都只会背诵用法(大概是在告诉我我的语法有问题),而我不知道为什么。

有任何想法吗?

这是一个bash实现:

re="(.+) -- (.+)([.].+)"
for f in *; do
    if [[ $f =~ $re ]]; then 
        newf="${BASH_REMATCH[2]} -- ${BASH_REMATCH[1]}${BASH_REMATCH[3]}"
        mv -- "$f" "$newf"
    fi
done

错误的原因很可能是--告诉mv “选项结束”。 在文件名之前添加其他--应该可以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM