$ perl -e '
open(F1,"<",shift);
open(F2,"<",shift);
while(<F1>) {
chomp; # strip trailing \n from input file.
$new=<F2>;
chomp $new;
print "s/$_/$new/g\n"
}' file1.txt file2.txt
s/360002ac000000000000001f20001add7/60002ac000000000000001f20001accb/g
s/360002ac000000000000001f20001add8/60002ac000000000000001f20001accc/g
s/360002ac000000000000001f20001add9/60002ac000000000000001f20001accd/g
s/360002ac000000000000001f20001ade0/60002ac000000000000001f20001acce/g
Это могло быть (и было написано как )в один -лайнер, я добавил перевод строки, чтобы сделать его более читаемым.
Если file1.txt
не имеет того же количества строк, что и file2.txt
, этот скрипт выдаст ложный вывод для любых строк в одном файле, которым нет соответствующей строки в другом. Так что не делай этого.
Чтобы применить эти изменения к вашему multipath.conf
файлу, запустите приведенный выше лайнер perl one -и перенаправьте вывод в файл (, например. sedscript.sed
), а затем запустите:
sed -f sedscript.sed multipath.conf
Убедитесь, что сгенерированный sed
скрипт делает то, что вы хотите, а затем либо перенаправьте вывод в новый файл, либо используйте параметр sed
-i
для редактирования «в -месте» multipath.conf
. Конечно, сначала сделайте резервную копию и скопируйте ее в безопасное место вне досягаемости-i
(или даже-i.bak
).
примеры входных файлов::
$ cat file1.txt
360002ac000000000000001f20001add7
360002ac000000000000001f20001add8
360002ac000000000000001f20001add9
360002ac000000000000001f20001ade0
$ cat file2.txt
60002ac000000000000001f20001accb
60002ac000000000000001f20001accc
60002ac000000000000001f20001accd
60002ac000000000000001f20001acce
Кстати, приложив немного больше усилий, этот лайнер perl one -можно было бы заставить читать в файле1 и файле2, создавать массив операций s/old/new/g, а затем применять их к третьему файлу (, например multipath.conf)
Например:
#!/usr/bin/perl
# run with three arguments:
# $1 = file containing old patterns
# $2 = file containing replacements
# $3 = file to modify
# THIS SCRIPT IS A CRUDE, MINIMALIST EXAMPLE AND CONTAINS NO ERROR
# CHECKING/HANDLING CODE AT ALL. USE AT OWN RISK.
use strict;
use File::Slurp;
# hash to store the search patterns and their replacements.
my %regex=();
open(F1,"<",shift);
open(F2,"<",shift);
while(<F1>) {
chomp; # strip trailing \n from input file.
my $new=<F2>;
chomp $new;
# qr// pre-compiles the regular expression, so it doesn't have to be
# compiled on every pass through the loop.
$regex{qr/$_/} = $new;
};
close(F1);
close(F2);
my $f3=shift;
my @file3=read_file($f3);
# transform and overwrite the third file.
open(F3,">",$f3);
foreach (@file3) {
foreach my $key (keys %regex) {
s/$key/$regex{$key}/g;
}
print F3;
};
close(F3);
Попробуйте это:
rsync -rzP --include="*some_file.gz" --include="*/" --exclude="*" user@domain:/mnt/file_direction /mnt/Downloads/Files