Использование расширения GNU grep-L
:
grep -L 'completed without error' o*
-L, --files-without-match
Suppress normal output; instead print the name of each input file from which no output would normally have been printed. The scanning will stop on the first match.
Без GNU grep:
for f in o*; do grep -q "completed without error" "$f" || printf "%s\n" "$f"; done
cp
не уязвим для этого состояния гонки. Когда установлено --no-clobber
, проверяется, существует ли адресат; если он определяет, что это не так, и поэтому он должен продолжить копирование, он запоминает, что должен копировать в новый файл. Когда приходит время открыть файл назначения, открывает его с флагами, которые обеспечивают его создание ,O_CREAT
иO_EXCL
; затем операционная система проверяет, что файл не существует при его открытии , и терпит неудачу (EEXIST
), если он существует.