Запуск препроцессора C напрямую:
$ cpp -P main.txt
Это будет сделано. Вам нужно будет указать имя включаемых файлов в кавычках:
#включают "fragment1.txt"
В качестве бонуса вы получаете всю мощь препроцессора C :макросов, условных включений и т. д.
GNU find
версия 4.6.0 в Bash CentOS 8:
find. -type f -name '.??' -o -name '.???'
Это найдет скрытые файлы с двумя или тремя символами.
Если вы считаете .
одним из символов:
find. -type f -name '.?' -o -name '.??'
Имя скрытого файла всегда начинается с точки. Скрытое имя файла, состоящее из двух символов, включая начальную точку, будет соответствовать .?
, а .??
будет соответствовать скрытому имени файла, состоящему из трех символов.
Предположим, что вам нужны имена обычных файлов , а не каталогов и других типов файлов, тогда вы сможете использовать
find. -type f \( -name '.?' -o -name '.??' \)
Это позволит найти обычные файлы в текущем каталоге или ниже, имена которых скрыты и имеют длину два или три символа.
Если вы используете оболочку bash
и вас интересуют только имена в текущем каталоге:
shopt -s nullglob
for name in.?.??; do [[ -f $name ]] && printf '%s\n' "$name"; done
Это позволит перебрать все имена, соответствующие любому из двух шаблонов (, если таковые имеются ), и распечатать те, которые соответствуют обычным файлам или символическим ссылкам на обычные файлы.
Установка параметра оболочки nullglob
в bash
гарантирует, что шаблон будет полностью удален, если он не соответствует ни одному имени, а не останется нераскрытым.
Также установив параметр оболочки extglob
в bash
,два шаблона .?
и .??
могут быть объединены в.@(?|??)
(или, возможно, .??(?)
, но это немного запутывает ).
В оболочке zsh
вы можете сделать так, чтобы шаблон соответствовал только обычным файлам с помощью квалификатора glob, и поэтому вам не нужен этот цикл:
printf '%s\n'.(?|??)(.)
Здесь (.)
— это квалификатор подстановки, который ограничивает сопоставление имен только обычными файлами.