Как проверить, доступен ли каталог для записи с помощью UID?

#perl #file #permissions #rule #file-find

#perl #файл #разрешения #правило #файл-найти

Вопрос:

Может File::Find::Rule использоваться для определения, доступен ли каталог для записи с помощью данного UID?

Я использовал следующий тест:

 my $uid = 123; # or whatever...

my @subDirs = File::Find::Rule->permissions(isWriteable => 1, user => "$uid")->directory()->maxdepth(1)->in( $dir );
if (scalar @subDirs == 0) {
    die "$dir is not writeable...";
}
die "$dir is writeable";
  

Но он всегда возвращает, что $dir доступен для записи, даже для тестовых каталогов, которые, как я знаю, ограничены.

Какие изменения я могу внести в этот тест, чтобы он заработал?

Редактировать

Использование use File::Find::Rule qw(permissions) привело к сбою скрипта. Мне никогда не нужно было указывать этот параметр при предыдущем использовании permissions() в более старых File::Find::Rule операциях.

Если я настрою правило следующим образом, у меня все заработает.

Здесь я проверяю наличие родительского каталога в списке подкаталогов:

 my @subDirs = File::Find::Rule::Permissions->directory()->permissions(isWriteable => 1, user => "$uid")->maxdepth(1)->name(".")->in("$dir");
  

Родительский каталог подкаталогов $dir является .

И если этот каталог существует в списке @subDirs , он должен быть доступен для записи.

Спасибо ikegami за предложение этого модуля.

Комментарии:

1. жужжание… У File::Find::Rule нет permissions метода.

2. Ах, вы, должно быть, используете File::Find::Rule::Permissions .

3. У меня работает нормально (при условии, что вы use File::Find::Rule ':permissions' )

Ответ №1:

Здесь я проверяю наличие родительского каталога в списке подкаталогов:

 my @subDirs = File::Find::Rule::Permissions->directory()->permissions(isWriteable => 1, user => "$uid")->maxdepth(1)->name(".")->in("$dir");
  

Родительский каталог подкаталогов $dir является .

Если этот каталог существует в списке @subDirs , он должен быть доступен для записи.