【问题标题】:Bash Script to gather directory and server info on a single line用于在一行上收集目录和服务器信息的 Bash 脚本
【发布时间】:2016-05-29 06:30:06
【问题描述】:

我目前在 ,sh 中使用以下命令来收集服务器列表中特定文件夹的内容列表,由 list.txt 描述(包含 IP)

for f in `cat serverlist.txt`; do
    echo "### $f ###";
    sshpass -p PASSWORD ssh USER@$f ls /usr/local/folder  >>list.txt;
done

虽然这可行,但它只是我问题的一半,我是 BASH 的新手

我想要获得的是一个这样格式化的列表

file1.HOSTNAMEOFSERVER1
file2.HOSTNAMEOFSERVER1
file3.HOSTNAMEOFSERVER1
file1.HOSTNAMEOFNEXTSERVER2
file2.HOSTNAMEOFNEXTSERVER2
file3.HOSTNAMEOFNEXTSERVER2
file1.HOSTNAMEOFNEXTSERVER3

有人可以帮忙吗?

【问题讨论】:

  • 脚本当前输出什么?

标签: bash scripting directory ls hostname


【解决方案1】:

未经测试:

while read host; do
    sshpass -p PASSWORD ssh USER@"$host" ls /usr/local/folder | 
        sed 's/$/.'"$host"/;
done < serverlist.txt

实际上不要将您的密码放在这样的脚本中。改为设置您的 ssh 密钥。

【讨论】:

  • 这会添加主机名,但也许结合 mikael 的回答,它将被格式化为列。我认为你们都回答了部分问题
  • ls 的输出不是 tty 时(因为它是(不是)当通过管道传输到 sed 时),输出无论如何都在一列中,并且 -C1 是多余的。
【解决方案2】:

只需将ls 输出格式化为带有选项-C1 的列:ls -C1 /usr/local/folder

【讨论】:

  • 这个命令行选项会将 ls 输出格式化成列,我看到 mikael 没有添加解释,我的编辑待处理
  • 我已经添加了一些解释。谢谢。
猜你喜欢
  • 2016-08-13
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
相关资源
最近更新 更多