Как идентифицировать файлы, в имени которых нет ext, но в свойстве которых есть расширение, например: nav.example.file, который на самом деле является текстовым документом

Как идентифицировать файлы, в имени которых нет ext, но в свойстве которых есть расширение, например: nav.example.file, который на самом деле является текстовым документом

find -maxdepth 1 ! -name "*.*" -print

Это не идентифицирует имена файлов, такие как INSSO.TEST.20100503.16400006, которые являются XML-документом.

решение1

Если вы хотите найти файлы по их содержимому, а не по названию, вам придется заглянуть в них. находитьСамо по себе оно этого не сделает, но вы можете заставить его выполнить другую программу, которая это сделает.

Я бы начал сфайл(1), который выведет некоторое описание файла. Если это полезно для ваших XML-файлов, я бы написал скрипт, который выведет имя файла, еслинаходитьговорит, что это правильный тип. Затем вызовите этот скрипт для всех подходящих файлов с помощью:

find . -type f -exec my-xml-detector {} \;

решение2

Если вы хотите найти в текущем каталоге файлы, не имеющие расширения или имеющие расширение, длина которого превышает 3 символа, или пустое расширение, вы можете сделать следующее:

find . ! -name . -prune ! -name '?*.[!.]' \
                        ! -name '?*.[!.][!.]' \
                        ! -name '?*.[!.][!.][!.]'

(предполагается, что ни одно имя файла не содержит последовательностей байтов, которые не образуют допустимые символы).

Связанный контент