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

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

  • Что происходит, когда я копирую файл из одного сетевого местоположения в другое
  • Объединение двух каталогов без копирования файлов
  • Почему режим cp --no-preserve = сохраняет режим? Доступны альтернативные инструменты?
  • `cp -al` snapshot, чьи жесткие ссылки будут перенаправлены на новый файл при редактировании
  • копировать огромное количество файлов в дату упорядоченного заказа каталога
  • Как подражать «cp -a» на Solaris, у которого его нет?
  • Правильное понимание прав для cp
  • «Wget -restrict-file-names = windows», похоже, не удалось преобразовать ссылки для NTFS
  • 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 может помочь избежать условий гонки в таких случаях.

    Interesting Posts

    Почему я не получаю сообщение, которое не соответствует, когда я запускаю этот скрипт?

    Использовать awk для отправки списка символических ссылок на файлы в каталог с пробелами в имени?

    установка google-chrome дает мне ошибку

    Использование sed для замены кода javascript в нескольких файлах

    Формат изменения даты в unix

    Какие шрифты, предварительно установленные в Linux, такие же, как в Windows 7+?

    Что влияет изменение источника clocksource?

    Нет настроек CentOS Windows 8 GRUB при перезагрузке

    Невозможно получить lm-датчики, чтобы правильно разобраться или загрузить ATI Radeon temp и fan

    Есть ли в Linux команда для запроса имени хоста с сервера WINS

    Проблема обновления Ubuntu php

    Идентификационные результаты различаются в зависимости от того, кто спрашивает

    двойная цитата с расширением tilda и обратная косая черта

    1 ГБ огромная страница – Является ли запись происходящей в 1 ГБ кусках?

    Кодировать с ffmpeg с помощью avi to mp4

    Linux и Unix - лучшая ОС в мире.