我需要在服务器上列出具有特定扩展名的所有文件。我需要它来显示服务器主机名,文件大小和文件的绝对路径。
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
由于
答案 0 :(得分:2)
find "$PWD" / -iname '*.jpg' -exec du -s {} + | sed "s/^/$(hostname): /"
的变化:
使用$PWD
代替$(pwd)
- 当bash将其放入参数时,无需运行命令
QUOTE!引用! QUOTE!
在+
上使用;
代替find -exec
,以便在du
的每个调用中传递多个文件;它的效率更高。如果您的find
版本不支持+
,则可以使用-print0 | xargs -0 du -s
。
通过sed
管道整个事件,在每行的前面插入主机名。