Подключение find -print0 и xargs -0

Ожидается, что find параметр -print0 и xargs параметр -0 будут работать вместе. man страница find говорит:

-print0 .... Этот параметр соответствует параметру -0 команды xargs.

Ну, у меня они работают до тех пор, пока find выдает некоторый результат. Как я могу заставить его работать, когда find не выводит НЕТ вывода?

find /dev /sys /usr -maxdepth 0 -print0 | xargs -0 -n1 | wc -l    # 3 - OK
find /dev /sys -maxdepth 0 -print0 | xargs -0 -n1 | wc -l         # 2 - OK
find /dev -maxdepth 0 -print0 | xargs -0 -n1 | wc -l              # 1 - OK
find /dev -maxdepth 0 -name "x" -print0 | xargs -0 -n1 | wc -l    # 1 instead of 0 - Fail

Могут случиться какие-то плохие вещи, например,

find -type d -name ... -print0 | xargs -0 du -sh

когда каталоги не найдены, xargs вызывает du без аргументов, а du предполагает .

P.S. Я знаю о параметре -exec для find, я просто хочу правильно соединить find и xargs.


person Vytenis Bivainis    schedule 31.08.2014    source источник


Ответы (1)


GNU xargs имеет следующую опцию:

  --no-run-if-empty
   -r     

Если стандартный ввод не содержит непустых символов, не запускайте команду. Обычно команда запускается один раз, даже если нет ввода.

person choroba    schedule 31.08.2014