将服务器主机名添加到'find'输出的每一行

时间:2015-08-24 21:18:07

标签: linux bash command-line

我需要在服务器上列出具有特定扩展名的所有文件。我需要它来显示服务器主机名,文件大小和文件的绝对路径。

echo $(hostname); find $(pwd) / -iname *.jpg -exec du -s {} \;

echo $(hostname); find $(pwd) / -iname *.jpg|xargs du -s

差点把我带到那里:
joes_server
5473 /home/joe/pics/sunset.jpg
8522 /home/joe/pics/mountains.jpg

我无法弄清楚如何在查找输出的每一行中包含主机名。我尝试将主机名函数添加到xargs或-exec部分会导致错误,因为它尝试将主机名应用于查找的输出。

有没有办法在查找输出的每一行中包含主机名?

当循环通过许多服务器时,我希望输出如下:
joes_server 5473 /home/joe/pics/sunset.jpg
joes_server 8522 /home/joe/pics/mountains.jpg
marys_server 5398 /home/mary/snapshots/background.jpg
janes_server 9642 /home/jane/pictures/flowers.jpg

由于

1 个答案:

答案 0 :(得分:2)

find "$PWD" / -iname '*.jpg' -exec du -s {} + | sed "s/^/$(hostname): /"

的变化:

  1. 使用$PWD代替$(pwd) - 当bash将其放入参数时,无需运行命令

  2. QUOTE!引用! QUOTE!

  3. +上使用;代替find -exec,以便在du的每个调用中传递多个文件;它的效率更高。如果您的find版本不支持+,则可以使用-print0 | xargs -0 du -s

  4. 通过sed管道整个事件,在每行的前面插入主机名。