Я прочитал справочную страницу и другие ссылки, но меня все еще смущает поведение find с -print0
option.
-print0 This primary always evaluates to true. It prints the pathname of
the current file to standard output, followed by an ASCII NUL
character (character code 0).
Первая команда:
$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null
/some/path//asdf199Intro-5kqlw.jpeg
/some/path/199intro-2jjaj.JPEG
/some/path/199intro-3.jpg
/some/path/wuer199intro-4.JPG
/some/path/xbzf199INTRO-1.jpg
Вторая команда:
$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null -print0
/some/path/136intro-3.jpg/some/path/wuer136intro-4.JPG/some/path/xbzf136INTRO-1.jpg
Я вижу, что имена файлов второй команды разделены нулевыми символами, но почему я получаю 3 вывода, а не 5 выше?
Ответы:
Ваш первый пример
не эквивалентно
Это эквивалентно
Когда ваше выражение содержит какое-либо действие, кроме
-purge
, неявная печать больше не добавляется. Ты хочешьПричина, по которой вы получаете только 3 имени файла, состоит в том, что они соответствуют вашему второму условию (тому, которое имеет действие). То, что вы напечатали, действительно означает
Надеемся, что это объясняет, почему только одна сторона печатает что-либо.
источник
find /some/path -iregex '.*intro.*\.jpe?g'
... и, поскольку теперь есть только одно выражение, это позволит избежать проблемы, выделенной cjm.