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

Ага. Думайте как HTML... но до -HTML. В основном куча наборных макросов для groff...

.

Во-первых, есть некоторые общепринятые разделы -, конечно, вы можете добавить больше...

NAME
SYNOPSIS
DESCRIPTION
OPTIONS
BUGS
AUTHOR
SEE ALSO

И для каждого (и везде еще )вы используете синтаксис макроса набора groff.

Например, TITLE HEADERможно сделать так-

.TH [name of program] [section number] [center footer] [left footer] [center header]

ИлиSECTION HEADER-

.SH [section name]

И, конечно же, вы можете выделить жирным шрифтом, курсивом, подчеркиванием и т. д.-

.B = bold
.BI = bold alternating italic
.BR = bold alternating Roman
.I = italic
.IB = italic alternating bold
.IR = italic alternating Roman
.RB = Roman alternating bold
.RI = Roman alternating italic 

И вы даже можете делать комментарии в своем текстовом файле-

." This is a comment

А затем такие вещи, как разбиение на абзацы (, такие как

html-тег, установленный )с.PP

Не забудьте правильно назвать файл, а затем gzipего, когда закончите.

Эта информация (и многое другое )взято изhttp://www.linuxhowtos.org/System/creatingman.htm

1
13.01.2021, 21:24
2 ответа

тл;др:

find. -name "*.txt" | perl -nle 's/\.txt$/.foo/; print unless -e' | cat -v

Вот пример использования Perl

Обратите внимание, что у нас отсутствует c.foo

$ ls
a.foo  a.txt  b.foo  b.txt  c.txt

Мы можем найти это так

$ ls *.txt | perl -nle 's/\.txt$/.foo/; print unless -e '
c.foo

c.foo отсутствует


Обновление :, касающееся имен файлов, содержащих метасимволы и т. д.

Рассмотрим этот набор имен файлов, который содержит пробелы, новые строки и символы вертикальной черты

$ ls *txt
 a.txt   b.txt   c.txt  'd d.txt'  'e'$'\r''e.txt'  'f'$'\n''f.txt'  'g|g.txt'   taskmaster.txt

На практике у Perl не возникает проблем с разбором вывода ls:

$ ls *txt | perl -nle 's/\.txt$/.foo/; print unless -e'
c.foo
d d.foo
e.foo
f
f.foo
g|g.foo
taskmaster.foo

Очевидно, что если ваши имена файлов содержат управляющие символы, вам может потребоваться сделать их более заметными

$ ls *txt | perl -nle 's/\.txt$/.foo/; print unless -e' | cat -v
c.foo
d d.foo
e^Me.foo
f
f.foo
g|g.foo
taskmaster.foo

Если вы хотите, чтобы это работало рекурсивно

$ find. -name "*.txt" | perl -nle 's/\.txt$/.foo/; print unless -e' | cat -v
./c.foo
./d d.foo
./e^Me.foo
./f
f.foo
./g|g.foo
./h*h.foo
./temp/j.foo
1
18.03.2021, 22:37

Вы можете попробовать это:

shopt -s globstar
for f in **/*.lri; do 
  [[ ! $(find. -name "$(basename "${f%%.lri}").dng") ]] && realpath "$f"
done
3
18.03.2021, 22:37

Теги

Похожие вопросы