Случается так, что NetworkManager отказывается находить или не находит?
Так или иначе я предложил бы Вас, проверьте, доступна ли беспроводная сеть для других устройств, означая, что беспроводная сеть не самостоятельно вниз? Также проверьте состояние беспроводного адаптера стороны клиента с помощью lspci
команда. Выполненный service wpa_supplicant restart
и посмотрите, помогает ли это также.
Поскольку Вы используете одинарные кавычки вместо двойных кавычек.
Perl не интерполирует переменные, включенные в одинарные кавычки, поэтому что Вы делаете, отправляет строке '$srceDir' в оболочку, которая будет обычно сбрасываться (очищают), если у Вас нет его набор в Вашей среде где-нибудь.
Попробуйте это:
my $find_cmd = "find $srceDir -type f -newermt 2013-02-14 ! -newermt 2013-02-15";
или лучше это:
my $find_cmd = sprintf
'find "%s" -type f -newermt 2013-02-14 ! -newermt 2013-02-15',
$srceDir;
... забота о пробелах, в то время как find_cmd был бы выполнен под разветвленным sh
.
* Важный комментарий *
Как @vonbrand справедливо прокомментировал: жемчуг действительно предлагает много библиотек для обеспечения коммуникации между Вашей программой и многими другими вещами.
Для операции файловой системы find
, жемчуг использует File
модуль библиотеки File::Find
, для которого существует немного утилиты find2perl
который переведет Ваш find
командная строка в небольшой сценарий жемчуга:
$ find2perl -type f -mtime -3 ! -mtime -2;
#! /usr/bin/perl -w
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; #$running_under_some_shell
use strict;
use File::Find ();
# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.
# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
sub wanted;
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '.');
exit;
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ &&
(int(-M _) < 3) &&
! (int(-M _) < 2)
&& print("$name\n");
}
Таким образом, Ваша потребность могла стать чем-то вроде этого:
#! /usr/bin/perl -w
my $srceDir = "/mnt/SDrive/SV/Capture Data/";
my $startDate = "2013-02-14";
my $endDate = "2013-02-15";
use strict;
use File::Find ();
use POSIX qw|mktime|;
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
my ($sDay,$eDay)=map {
my ($year,$month,$day)=split("-",$_);
(time()-mktime(0,0,0,$day,$month-1,$year-1900))/86400
} ($startDate,$endDate);
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ &&
(-M _ < $sDay) &&
! (-M _ < $eDay)
&& print("$name\n");
}
File::Find::find({wanted => \&wanted}, $srceDir );
Лучшее преимущество выполнения этого, вместо open $fh,"find ...|"
, это, это очень устойчиво; Вы не должны заботиться о символах, существующих в именах файлов (как пробелы, кавычки, амперсанд...).
При предоставлении одной строки с метасимволами оболочки (как пространство) для команды затем, это будет интерпретироваться как командная строка оболочки, что означает две вещи:
Лучше всего должен выполнить команду непосредственно, которая является путем предоставления списка аргументов команде для выполнения, вместо того, чтобы просить оболочку разделять командную строку для создания того списка аргументов.
Кроме того, если Вы не используете -print0
, вывод find
не может быть выполнен последующую обработку безопасно, потому что записи разделяются с символами новой строки, в то время как новая строка является совершенно допустимым символом в имени файла, так как я сказал в своем ответе на Ваш подобный вопрос, необходимо будет записать это как:
my $srceDir = "/mnt/SDrive/SV/Capture Data";
my @find_cmd = ("find", $srceDir, "-type", "f", "-newermt", "14 Feb 2013", "-print0");
open FIND, "-|", @find_cmd;
$/ = "\0"; # set perl's record separator
while (<FIND>) {
...
}
close FIND or warn $! ?
"Error closing find pipe: $!" :
"find exited with non-zero exit status: $?";
(и BTW, find
не производит total
строки, можно сбивать с толку с ls
).
close or warn $! ? "Error $!" : "Error, rc was: $?" ;
statment является чистым, хорошим и безопасным способом закрыть каналы команды, чтобы разрешить отлаживать для образца. (+1 для Stephane, только для этого :). Вообще, для контакта со сложными именами файлов и сокращения вызовов ветвления, предпочитая пользоваться библиотеками стандартов, как File::Find
хорошая практика!
– F. Hauri
16.02.2013, 18:36
(int(-M _) < $sDay)
является неправильным, если Вы не запускаете свой скрипт в полночь (и даже затем, я предполагаю, что изменения DST испортили бы вещи). Отметьте этоDate::Parse
не один из базовых модулей жемчуга (вопрекиFile::Find
илиPOSIX
(mktime) или теперьTime::Piece
). При помощиfind "%s" ...
, у Вас все еще будут проблемы с именами файлов с двойной кавычкой, обратной галочкой, долларом или символами обратной косой черты. – Stéphane Chazelas 16.02.2013, 21:33