Проверьте, не является ли файл каталогом в Perl
Я знаю, что вы можете проверить, является ли файл каталогом, используя:
if(-d $filename)
но как вы можете проверить, если это не каталог?
4 ответов
вы не думали попробовать следующее?
if (! -d $filename) ...
результат -d
- это, в конце концов, то, что можно рассматривать как логическое значение, следовательно, логический оператор not !
будет работать нормально.
и, если вы что-то ищете более конкретную чем "не каталог", см. здесь. Есть довольно много вещей, которые не являются каталогами, которые иногда не имеет смысла рассматривать как обычные файлы.
Keep in имейте в виду, что вы уже подтвердили, что имя файла . если вы ! -d
в несуществующем имени файла он вернет true.
это философский вопрос о том, считаете ли вы несуществующую вещь "не каталогом", но, если вы хотите убедиться, что она существует, вы можете использовать ! -d
в сочетании с -e
, например:
if ((-e $filename) && (! -d $filename)) ...
чтобы проверить, является ли что-то файлом, но не каталогом, вам нужно просто объединить 2 теста (нет ни одного теста):
if (-e $file && !-d $file) { # a file but not a directory }
обратите внимание:
при всем уважении, ответ paxdiablo неверен для того, как сформулирован вопрос (pure
!-d
не работает для того, что пользователь спросил, поскольку он проверяет, является ли случайная вещь / строка не каталогом, а не является ли что-то файлом, который не является каталогом). Е. Г.!-d NO_SUCH_FILE
возвращает истинный.ответ Грега может быть правильным в зависимости от того, должен ли исходный пользователь включать не простые файлы (например, символические ссылки, именованные каналы и т. д..) в их определении "файл, который не является каталогом". Если они хотели включить все эти специальные "файлы", ответ Грега также неверен, поскольку "-f" исключает их (как Грег мудро отметил в своем ответе в первую очередь).
на -f
оператор проверяет, является ли что-то "обычным файлом". Это исключает каталоги, но также исключает такие вещи, как каналы и узлы устройств.
if (-f $filename) { ...