не может создать обычный файл 'filename': Файл существует

Я получаю это странное сообщение об ошибке в одном из моих скриптов сборки – cp не удается, возвращая ошибку «Файл существует». Я даже пытался использовать cp -f , который должен перезаписать файл, если он существует, но ошибка все же появляется. Запуск cp для перезаписывания существующих файлов отлично работает, когда я делаю это вручную. Что может вызвать эту ошибку?

One Solution collect form web for “не может создать обычный файл 'filename': Файл существует”

Это оказалось обусловлено состоянием гонки. cp проверяет, существует ли целевой файл, а если нет – перезаписывает его. Проблема состояла в том, что эта команда cp запускалась дважды параллельно, что приводило к тому, что этот файл иногда появлялся после проверки того, существует ли он, но перед попыткой создать файл. Выход strace выглядит следующим образом:

 # Command was "cp ab" stat("b", 0x7fff89510620) = -1 ENOENT (No such file or directory) stat("a", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 stat("b", 0x7fff895103a0) = -1 ENOENT (No such file or directory) # File b will be created at this point in time open("a", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 open("b", O_WRONLY|O_CREAT|O_EXCL, 0644) = -1 EEXIST (File exists) 

Вот некоторый код bash, используемый для этого:

 #!/bin/bash touch a f() { while true; do rm -fb strace -o /tmp/cp${BASHPID}.trace cp ab || break done } cleanup() { kill -9 %1 %2 } f & f & trap cleanup exit wait 

Эта же ошибка может произойти с mkdir -p или любым другим действием, которое пытается перезаписать файл. Использование flock может помочь избежать условий гонки в таких случаях.

  • Какова цель cp-s?
  • Как найти и скопировать файлы на основе расширения?
  • Как избежать cp -r ~ / some / folder /. копирование всех файлов на верхний уровень текущей папки?
  • Как я могу использовать «псевдоним» для каталога назначения при копировании?
  • Копирование каталога из одной папки в другую не работает
  • Как я могу выборочно копировать файлы из одного каталога в другой каталог?
  • Может ли cp -r заменить cp -a в этом случае?
  • Что не так с моей командой копирования?
  • Можно ли монтировать трубку в cp?
  • Почему «cp -uav» из git repo показывал «удаленные» для некоторых файлов?
  • Почему cp / mv не может быть прервано до конца текущего файла
  • cp -al не создает жесткие ссылки
  • Linux и Unix - лучшая ОС в мире.