【问题标题】:Rename directories , softlinks in a specific directory重命名目录,特定目录中的软链接
【发布时间】:2016-06-27 04:39:50
【问题描述】:

我的作业是编写一个 bash 脚本,在其中我输入一个目录作为参数 喜欢./hw.sh /home/stuff

如果有任何目录,我必须像这样重命名它们 旧名 (twitch) 新名 (twitchdir)

如果目录中除了目录之外还有其他东西,它们的名称应该是: 旧名 (things.txt) 新名 (things.txtetc)

if [ -z $1 ] || ! [ -d $1 ]; then

        echo "ERROR";
else 

        for row in $1/*;
        do
                if [ -d "$row" ]; then
                        mv "$row" "$rowdir"
                else
                        mv "$row" "$rowetc"
                fi
        done
fi

如果我正在运行脚本,它会告诉我无法移动参数。 第一个if是分析参数是否为目录。

【问题讨论】:

    标签: bash directory rename


    【解决方案1】:

    导致脚本错误的原因是"$rowdir""$rowetc",因为您没有定义此类变量。因此mv 命令本质上是试图将文件移动到未定义变量的值'',但这是失败的。因此,如果您想将字符串附加到原始变量的值,请执行以下操作:

    mv "$row" "$row"dir           # for directories
    mv "$row" "$row"etc           # for others
    

    mv "$row" "${row}dir"           # for directories
    mv "$row" "${row}etc"           # for others
    

    例如,在仅包含文件somefile 的工作目录中,考虑,

    $ ls
    somefile
    $ row=somefile
    $ mv "$row" "$rowetc"
    mv: cannot move ‘somefile’ to ‘’: No such file or directory
    $ mv "$row" "$row"etc
    $ ls
    somefileetc
    

    【讨论】:

    • 恕我直言,更清洁的解决方案是使用大括号,例如"${row}dir" 将所有内容保留在引号内。 @PatrikTóth 如果这解决了您的问题,您应该将其标记为已接受,这就是我们在这里说谢谢的方式!
    猜你喜欢
    • 2012-03-31
    • 2011-07-15
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2018-03-18
    相关资源
    最近更新 更多