На самом деле, на картинке нет каких-либо штриховых символов. Выполнение сброса
(обычно) помогает с , что .Но reset
также восстанавливает режимы терминала, что несколько более надежно, чем stty sane
:
stty sane
, это устранит проблемы с режимами терминала. для эха и возврата каретки, но на платформах Unix (например, AIX, HPUX и Solaris), который устанавливает для символа стирания значение, которое вам, вероятно, не нужно, например ^?
или #
вместо ^ H
. reset
(по крайней мере, предоставляемая ncurses) улучшает эти настройки и отправляет строку инициализации терминала. Этот обычно сбрасывает альтернативный набор символов (но некоторые терминалы могут отличаться, поскольку это также функция, иногда упускаемая из виду в описаниях терминалов Unix). Если бы вы показали символы рисования линий, это, вероятно, было бы из-за наличия управляющего символа смещения (не escape-последовательности):
SO Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This
invokes the G1 character set.
Вот снимок экрана, показывающий символы рисования линий, который я сделал
ls
tput smacs
ls -l
Иногда кто-то показывает изображение с двоичным мусором, смешанным с символами рисования линий, но ни этот вопрос, ни другой упомянутый (ab) не используют эту функцию. Вместо этого они иллюстрируют две другие особенности:
Дополнительная информация:
Здесь полезен предикат -path
:
find. -path '*/ABC_MPSC/ABC.jpg'
Описание POSIXдля этого предиката:
The primary shall evaluate as true if the current pathname matches pattern using the pattern matching notation described in Pattern Matching Notation. The additional rules in Patterns Used for Filename Expansion do not apply as this is a matching operation, not an expansion.
Причина, по которой ваш -name "ABC_MPSC/ABC.jpg"
не удался, заключается в том, что предикат -name
:
shall evaluate as true if the basename of the current pathname matches pattern
Другими словами, -name
никогда не видит каталог текущего имени файла, только само базовое имя файла (ABC.jpg, например ).
Два способа (помимо с использованием-path
):
Найдите каталог, затем определите файл:
find / -type d -name 'ABC_MPSC' -exec test -f {}/ABC.jpg \; -print
Это зависит от реализации find
для расширения {}
до текущего имени пути к найденному каталогу, даже несмотря на то, что он объединен с/ABC.jpg
(это не требуется для этого ). Его также можно записать как
find / -type d -name 'ABC_MPSC' \
-exec sh -c 'test -f "$1"/ABC.jpg' sh {} \; -print
Найдите файл, затем проверьте имя его родительского каталога:
find / -type f -name 'ABC.jpg' -exec sh -c '
case $(dirname "$1") in
*/ABC_MPSC) exit 0 ;;
*) exit 1
esac' sh {} \; -print
Обе эти альтернативы будут медленнее, чем использование -path
, как показывает Джефф. Тем не менее я оставляю их здесь в качестве примеров, так как они могут быть адаптированы для других целей.