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

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

  • Почему cp / mv не может быть прервано до конца текущего файла
  • CP: максимальные аргументы числа файлов файлов для утилиты копирования
  • Как имитировать вывод веб-камеры путем обновления файла jpg?
  • Скопируйте файлы, созданные сегодня, без команды FIND и SFTP на другой сервер
  • В RHEL / CentOS 7, действительно ли mv делает cp & rm в одной и той же файловой системе?
  • Копировать несколько файлов и создавать целевые каталоги одновременно?
  • Поиск по шаблону и копирование в той же папке, но с другим именем
  • Каков результат команды «du» во время длинной копии?
  • 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

    Установленный openSuse и теперь не может загружаться с USB или DVD

    Изменение размера облачного жесткого диска

    Удаление шаблона из файла и добавление его в конец?

    Застрял в bootloop после обновления до Ubuntu 16.04LTS

    Есть ли файловая система, которая позволяет мне вставить некоторый блок в середине файла в O (1)?

    Как устранить проблему пересылки DDNS?

    Grep. Найти несколько шаблонов AND в любом порядке с использованием одного условия

    debootstrap не работает в кали и мяте

    Найти, когда файл был закрыт в Unix

    avconv создает файлы, продолжительность которых неверна

    Как использовать логический ИЛИ в поиске?

    Выйти из дискового пространства в разделе / ​​usr / ports, как я могу создавать порты?

    Что случилось с этой конфигурацией автолога?

    звук в firefox через ssh -X

    Как распечатать все записи в файле 1, но обратите внимание на записи, которые не соответствуют файлу2?

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