linux - Bash 重命名文件脚本不起作用

标签 linux bash

我有以下脚本,但由于某种原因它不起作用

find . -name '*---*' | while read fname3 

do
    new_fname3=`echo $fname3 | tr "---" "-"`

    if [ -e $new_fname3 ]
    then
            echo "File $new_fname3 already exists. Not replacing $fname3"
    else
            echo "Creating new file $new_fname3 to replace $fname3"
            mv "$fname3" $new_fname3
    fi

done

但是如果我使用

find . -name '*---*' | while read fname3 

do
    new_fname3=`echo $fname3 | tr "-" "_"`

    if [ -e $new_fname3 ]
    then
            echo "File $new_fname3 already exists. Not replacing $fname3"
    else
            echo "Creating new file $new_fname3 to replace $fname3"
            mv "$fname3" $new_fname3
    fi

done

脚本可以工作,但我最终得到了 3 个下划线“_”,如何用一个破折号替换 3 个破折号“---”?

谢谢

最佳答案

看看man trtr 将仅替换单个字符。

使用类似 perl -wpe "s/---/-/" 的内容。

另请参阅man 1p rename。它所做的几乎正是您想要的:

rename 's/---/-/' *---*

关于linux - Bash 重命名文件脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696433/

相关文章:

bash - 从 hadoop fs、bash 到局部变量的路径是什么?

c - 为什么 Linux 不遵循 Unix 系统调用约定?

java - Debian 3.16 上缺少 libswt-gtk-3349.so

mysql - 在哪里可以找到死服务器的 MySQL 版本?

linux - Bash:mv:指定的目标不是目录

bash - 如何将不包括一个特定目录的文件和目录移动到该目录

macos - 打开ssh连接并在启动时保持打开状态

bash - 进入 grep -v 时获取退出代码

android - 使用monkeytalk测试android应用程序,录音按钮被禁用

linux - VPATH 在 makefile 中不起作用