Можно использовать lsof
вместо netstat
: что-то вроде этого: sudo /usr/sbin/lsof -i tcp@1.2.3.4:80
, но lsof только доступен пользователю root и часто не установленный по умолчанию, таким образом, это - дополнительная внешняя зависимость.
Если Вы доверяете git
точка зрения на том, что является двоичным файлом или нет, можно использовать git grep
получить список недвоичных файлов. Принятие t.cpp
текстовый файл, и ls
двоичный файл, оба, в которых зарегистрировались:
$ ls
t.cpp ls
$ git grep -I --name-only -e ''
t.cpp
-I
средства опции:
-I
Не соответствуйте шаблону в двоичных файлах.
Объединить это с Вашим sed
выражение:
$ git grep -I --name-only -z -e '' | \
xargs -0 sed -i.bk -e 's/[ \t]\+\(\r\?\)$/\1/;$a\'
(-z
/ xargs -0
помочь со странными именами файлов.)
Проверьте git grep
страница справочника для других полезных опций - --no-index
или --cached
мог помочь в зависимости от точно, на какой набор файлов Вы хотите воздействовать.
Вот сценарий Perl, который выполняет итерации по его аргументам (который должен быть именами файлов), и добавляет новую строку в каждый файл, который не заканчивается в новой строке. Файлы, содержащие пустой байт, пропускаются. Файлы, которые уже заканчиваются в новой строке, не изменяются. Файлы, которые содержат CR, получают добавленный CRLF, другие получают просто LF. Непротестированный.
#!/usr/bin/env perl
foreach my $f (@ARGV) {
open F, "<", $f or die;
my $last = undef;
my $cr = 0;
while (<>) {if (/\0/) {undef $last; break} $last = $_; ++$cr if /\r$/}
close F;
if (defined $last && $last !~ /\n\Z/) {
open F, ">>", $f or die;
print($cr ? "\r\n" : "\n");
close F or die;
}
}
Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators
". – l0b0 11.04.2012, 17:18