【问题标题】:for loop on ssh bash to rename multiple filesssh bash上的for循环重命名多个文件
【发布时间】:2017-06-21 20:57:44
【问题描述】:

已创建文件集

测试1,测试2,测试3

以上文件位于不同的服务器名称 xyz.com
如果我需要重命名带有前缀的文件

ex: test1 > old_test1
    test2 > old_test2
    test3 > old_test3

我试过了:

#!/bin/bash
ssh $xyz.com -t -t /bin/bash <<EOF
cd /tmp
for i in {test*}
    do
    mv -v {i} "{i/test/old_test}"
    ls -ltr
    done
exit

但输出只是 mv -v 后跟文件列表,没有发生任何事情(重命名)。

【问题讨论】:

标签: linux bash ssh


【解决方案1】:

!/bin/bash

ssh $xyz.com 'bash'

【讨论】:

    【解决方案2】:

    将您的 rename-command 更改为以下内容:

    mv -v "$i" "${i/test/old_test}";
    

    我尝试了您的问题如下。 在我的目录中有以下文件:

    test1
    test2
    test3
    

    使用这个命令:

    for i in $(ls); do (mv "$i" "${i/test/old_test}"); done
    

    我重命名所有文件。 我的文件现在是:

    old_test1
    old_test2
    old_test3
    

    请像这样更改你的 for 循环:

    #!/bin/bash
    ssh $xyz.com -t -t /bin/bash <<EOF
    cd /tmp
    for i in $(ls);
       do
       mv -v "$i" "${i/test/old_test}";
       ls -ltr
       done
    

    【讨论】:

    • 嗨@Globethrottler。如果您收到错误“无法访问”,则说明您的用户权限存在问题。请先在您的机器上本地尝试。如果一切正常,您需要正确的用户(root)在服务器上执行此操作。您正在连接的用户无权重命名服务器上的文件。
    • 在本地它可以正常工作,在进入 ssh 正常移动工作但循环它抛出各种错误时,我应用了上面的更改,它说:错误替换,所有文件都有 700 作为权限
    • 您是否在服务器上的正确目录中?使用以下命令对其进行测试: for i in $(ls /tmp);做(回声“$ i”);完毕 。您还可以删除您的 cd 命令并在循环中将“/tmp”附加到 ls
    • 在做这样的改变 ssh $xyz.com -t -t /bin/bash
    • @Globethrottler。尝试更改您的 ssh 命令 ssh $xyz.com -t bash
    猜你喜欢
    • 2012-02-12
    • 2021-12-01
    • 2012-11-11
    • 2015-09-18
    • 2023-03-25
    • 2012-08-04
    • 2013-07-08
    • 2023-03-15
    • 2014-06-08
    相关资源
    最近更新 更多