Вы не можете надежно использовать состояние find
, чтобы определить, успешно ли выполняются выполняемые им команды.Определение POSIX find
гласит:
find
STATUS EXIT
Должны быть возвращены следующие значения выхода:
0
Все операнды пути были успешно пройдены.
>0
Произошла ошибка.
Это отличается от того, чтобы что-либо говорить о состояниях выхода любых выполненных команд.
Утилита xargs
предоставляет необходимую информацию.POSIX говорит:
xargs
STATUS EXIT
Должны быть возвращены следующие значения выхода:
0
Все вызовы утилиты вернули выходстатус ноль.
1-125
Не удалось собрать командную строку, отвечающую указанным требованиям, один или несколько вызовов утилиты вернули ненулевой статус завершения или произошла какая-то другая ошибка.
126
Утилита, указанная утилитой, найдена, но не может быть вызвана.
127
Утилита, указанная утилитой, не найдена.
Итак, вы можетеuse:
if find . -maxdepth 1 -name "*.tar" -print0 | xargs -0-L 1 tar -xf
then echo "Untar Successful"
else echo "Untar Not Successful"
fi > test.txt
Обратите внимание, что при этом используется только одно перенаправление.Он проверяет состояние выхода конвейера, то есть состояние выхода последней команды в конвейере, то есть состояние выхода xargs
, которое сообщает вам, работало ли оно или нет.
* 1054Опции * и -0
являются расширениями GNU для стандарта POSIX.Пока ваши имена файлов не содержат пробелов, символов новой строки или табуляции, вы можете спокойно использовать -print
(и не иметь соответствующего аргумента для xargs
).