我有一个文件,其中包含机器A
上使用的路径的列表。我想检查机器B
上的每个路径。此时,我只需要遍历机器B
上的列表并检查路径是否存在(通过在Perl中使用-e
标志)。问题是我在机器A
上没有完全存在的路径,而是存在但路径不同。例如:
B
机器machine A: /usr/bin/pkgs/python/2.7.2/lib/site-packages/_ssl.so
machine B: /usr/bin/pkgs/python/2.7.5/lib/python2.7/pkgs/_ssl.so
上的某些工具(我们称其为toolX
)使用第一条路径,而机器A
上的某些工具使用第二条路径。是否可以找到一种方法来警告文件B
上根本不存在该文件?首先,我想从B
和Perl
包和模块开始。我有在机器Python
上运行的Perl
和Python
的版本列表,我想提醒一些模块是否不存在。也许我应该遍历B
和Perl
软件包(使用Python
),并寻找所有具有相同名称和相同大小的相似模块。
我的一部分代码:
find
总而言之,我想提醒机器open(my $fh_d, '>', $destination) or return 0;
open(my $fh_s, '<', $source) or return 0;
while(my $file = <$fh_s>) {
chomp($file);
print $fh_d $file."\n" unless(-e $file);
}
close ($fh_s);
close ($fh_d);
上是否不存在特定路径,但是以一种聪明的方式,因此,如果存在另一个具有相同名称的路径,则可能是这样(问题是怎么样?)。解决此问题的最佳方法是什么?我应该如何确定该路径是B
还是perl
路径?
答案 0 :(得分:1)
据我了解,您在A上有一个目录列表,其中每个目录都要输出true或false,以确定该目录是否存在于机器B上
find /etc/ -type d > /tmp/dirlist
cat /tmp/dirlist | ssh B "perl -nle'print q().(-d\$_?q(yes):q(no)).qq( \$_)'"
...其中B是您的另一台计算机。将B
替换为username@remote.server.org
或其他内容。请记住,ssh可以调用远程服务器上任何具有相同stdin和stdout的命令。默认为用户外壳程序(例如bash)。 q(string)
和qq()
的引用方法只是为了避免使用'
和"
,因为我已经用完了。