Чтобы отфильтровать удобочитаемые имена файлов, вы можете использовать [: print:]
( печатное ) имя класса символов . Вы найдете больше о таких классах в руководстве для grep
.
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
С другой стороны, требование «удобочитаемости» может относиться к содержимому файла, а не к его имени. Другими словами, вы будете искать текстовые файлы. Это немного сложнее. Как предлагает @D_Bye в комментарии, вы должны затем использовать команду file
, чтобы определить тип содержимого файла. Но запускать файл
после канала было бы не очень хорошей идеей, потому что это усложнило бы задачу отображения имени файла. Вот что я предлагаю:
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
Вкратце, как работает file
-part:
-exec
выполняет sh -c 'file -b $ 0 | grep -q text 'FILENAME
для каждого FILENAME
, который удовлетворяет всем предыдущим условиям (тип, размер, неисполняемый). sh
) запускает этот короткий сценарий : file -b $ 0 | grep -q text
, заменяя $ 0
именем файла. file
определяет тип содержимого каждого файла и выводит эту информацию. Параметр -b
предотвращает печать имени каждого проверенного файла. grep
фильтрует вывод, поступающий из программы файл
, ища строки, содержащие «текст» . (Убедитесь сами, как выглядит типичный вывод команды file
.) grep
не выводит отфильтрованный текст, потому что он имеет -q
(тихий) вариант. Он просто меняет свой статус выхода либо на 0
(что означает «истина» - найден отфильтрованный текст), либо на 1 (что означает «ошибка» - текст ] "текст" не появился в выводе из файла
). grep
, передается далее sh
в find
и действует как окончательный результат для всего » -exec sh -c 'file $ 0 | grep -q text' {} \;
"test. -print
(т.е. печатается имя проверяемого файла). Вы можете поместить следующие строки в свой vimrc, чтобы закрыть vim, если какой-либо из его аргументов является каталогом:
for f in argv()
if isdirectory(f)
echomsg "vimrc: Cowardly refusing to edit directory " . f
quit
endif
endfor
В качестве альтернативы, если вы хотите закрыть только в том случае, если аргументы all являются каталогами, вы можете попробовать что-то вроде этого:
let ndirs = 0
for f in argv()
if isdirectory(f)
let ndirs += 1
endif
endfor
if ndirs > 0 && ndirs == argc()
echomsg "vimrc: Cowardly refusing to edit directories"
quit
endif
Это похоже на вывод плагина netrw
.
Это можно отключить, введя файл ~/.vimrc
.
let loaded_netrwPlugin = 1
Теперь, если вы попытаетесь отредактировать каталог, вы получите ошибку это каталог
.