Функция open завершилась с ошибкой нет такого файла или каталога
Тем не менее, когда я ls в директории файл указан и он также указан в моем ftp-клиенте. Я попытался создать файл с тем же именем, и я получаю два файла с одинаковым именем.
Я могу открыть файл, который предположительно не существует, но я все еще не могу удалить его. Я также попытался перезагрузить свой сервер. Есть идеи, в чем может быть проблема? Я использую 64-битную версию Ubuntu, но не думаю, что это 32/64-битная проблема. Я должен также отметить, что я удалил много других файлов png, загруженных тем же PHP-скриптом.
Вывод при попытке rm
Я попытался создать файл с тем же именем, и я получаю два файла с одинаковым именем.
Это означает, что при отсутствии повреждения файловой системы у вас есть два файла с двумя разными именами, которые выглядят одинаково из-за непечатаемых символов или символов, которые выглядят одинаково в вашем наборе символов / шрифте. --escape возможность ls Ваш друг в таких случаях, как и такие инструменты, как cat -v ,
Так тоже есть rm -i -- *
TL;DR: запустить ls -1b найти имя файла, скопировать строку, в которой оно появляется, и дать его rm ,
Как и предполагали другие, скорее всего, это связано с ограничениями в способе ls - и некоторые другие программы, включая клиентское и серверное программное обеспечение - по умолчанию обрабатывают странные имена файлов, например, содержащие управляющие символы. Ваш успех с ответом JdeBP убедительно свидетельствует о том, что так оно и было, хотя и до этого было бы неплохо.
За ls когда стандартный вывод является терминалом, ? символы печатаются на своих местах. Так что, если вы не пьяный ls вывод любой другой команды (или перенаправление ее в журнал для просмотра), возможно, ваше имя файла не содержит управляющих символов. Но есть и другие проблемные символы - например, имя файла содержит конечные пробелы.
Это поведение ls может сбивать с толку, но не является ошибкой, может быть явно переопределено пользователем (см. ниже).
При попытке получить доступ к файлу или удалить его удаленно, ошибки в клиентском или серверном программном обеспечении могут привести к таким проблемам.
Я испытал такого рода вещи через ftp я несколько раз, в том числе для файлов, имена которых содержат завершающие пробелы. (То, что это не сработало, было связано с ошибкой в моем ftp-клиенте.) Даже когда вы вручную создаете файл, в зависимости от того, как вы его создаете, иногда довольно легко случайно вставить конечный пробел или другой пробел, который может выглядеть как пространство, хотя это не так.
Это ситуация, когда ls -1b (или же dir -1 ) пригодится:
- -1 говорит ls показать одну запись в строке. Таким образом, не возникает путаницы в том, где заканчивается одно имя файла и начинается другое. Это удобно для файлов со странными именами.
- -b говорит ls печатать escape-последовательности для любых специальных символов. Выход из ls -b могут быть скопированы и вставлены буквально в команду, без добавления кавычек: все проблемные символы уже заключены в кавычки таким образом, что оболочка распознает их такими, какие они есть.
Предостережение только одно: если последний символ в строке \ скопируйте один символ после этого, так как это означает \ цитирует пробел.
Вы можете запустить ls -1b просто так, или вы можете передать ему шаблон оболочки (например, ls -1b qyx* ). Globbing может или не может найти файл, в зависимости от того, присутствуют или нет управляющие символы (или другие странные символы) в той части имени, которая появляется в шаблоне glob.
Скопировав \ версия имени файла, данного вам ls Вы можете вставить это в команду. Вам не нужно изменять его вручную каким-либо образом. В вашем случае, если вы хотите удалить файл, введите rm введите пробел, вставьте строку и нажмите Enter .
Я пытаюсь создать файл tar.gz с помощью следующей команды:
Затем он начинает создавать файлы (много файлов в папке), но затем я получаю следующую ошибку:
Я не вижу описания этой ошибки, что это значит?
Удалить - из vcfz вариантов. tar не нужен дефис для опций.
Аргументом для -f опции является дефис z . Таким образом, команда пытается выполнить архивирование dvr_rdk_v1.tar.gz и вызывается в dvr_rdk архиве z . Без дефиса семантика параметров изменяется, так что следующий аргумент в командной строке, то есть имя файла вашего архива, становится аргументом для f флага.
Также проверьте разрешение на запись в каталог, из которого вы выполняете команду.
Это не нуждается в дефисах, но они не должны быть проблемой, они просто необязательны @MichaelMrozek На самом деле удаление - действительно имеет значение, потому что GNU tar - это странно. Аргументы опции не могут быть связаны с первым аргументом, когда он не начинается с a - , поэтому аргумент to f является следующим аргументом tar , и, следовательно tar vcfz dvr_rdk_v1.tar.gz , эквивалентен tar -v -c -f dvr_rdk_v1.tar.gz -z . Я также понял, удастся ли мне удалить z или j сжатие архива будет успешным даже при - включенном. Когда я добавляю дефис, он включается, он обрабатывает последний символ в опции как «файл». В результате я получаю j или z в виде архивного файла, если я использую эту опцию -cvfz или -cvfj . Сводка: если «f» встречается как опция, отличная от последней, команда не будет выполнять то, что предполагалось. Я не понимаю, как Gnu не может добавить предупреждение, когда обнаруживает такую серьезную и легко обнаруживаемую проблему. Я просто потратил 40 минут на отладку этой странности. Этот, должно быть, потратил сотни тысяч человеко-часов производительности.-f Параметр должен непосредственно предшествовать имя файла. Итак, используйте tar -vczf filename.tar.gz вместо -vcfz
Ах, это объясняет, почему команда, которую я использую, пытается создать сжатый архивный файл, который вызывается j или z с этими командами -cvfj и -cvfz соответственно.Команда дегтя исторически была одна из немногих команд , которые не следуют в Unix директивы коммунального предприятия синтаксисом .
f
Используйте первый файловый операнд (или второй, если b уже указан) в качестве имени архива вместо системно-зависимого значения по умолчанию
Хотя правила синтаксиса включают это:
Рекомендация 5.
Один или несколько параметров без аргументов-параметров, за которыми следует не более одного параметра, который принимает аргумент-параметр, должны приниматься при группировании за одним разделителем '-'.
Репутация: 1
Всего: 109
Если из командной строки я подаю команду
То всё классно отрабатывает.
Если же я КОПИРУЮ ( ) эту же строку в скриптик, то у меня получается фигня.
Репутация: нет
Всего: 3
Репутация: 1
Всего: 19
Репутация: 1
Всего: 109
в скрипте я указал sh, а вот в консоли какой по умолчанию. Не помню.
Репутация: 34
Всего: 317
(баш может и съел бы это, но большинство скриптов бегут из-под /bin/sh)
кроме того, пробелы в именах ни черта читабельности не дают.
рекомендуется следовать принципу KISS (Keep It Simple, Stupid)
флажок v, тоже на фиг не упал. иначе надо вывод в /dev/null.
и проверять результат этой команды - тоже дядя будет.
Репутация: 1
Всего: 109
Добавлено через 1 минуту и 13 секунд
Репутация: 1
Всего: 19
Репутация: 34
Всего: 317
ты прав. я не знаю почему, но мне показалось (или я както криво скопипастил), что было по-другому, так:
Добавлено через 1 минуту и 37 секунд
newbee, если тебя волнует читаемость, пиши скрипты на питоне.
Репутация: 1
Всего: 109
bilbobagginz, вот я иногда не понимаю, когда ты шутишь, а когда серьёзно говоришь.
Репутация: 34
Всего: 317
я тут пишу. если бы ты слышал меня, было бы все понятно.
может подкасты начать записывать ?
Репутация: 1
Всего: 19
Репутация: нет
Всего: нет
Репутация: 1
Всего: 109
Вместо 3-х строк
Всё работает.
Всем спасибо!
bilbobagginz, тебе особенно!
Репутация: 34
Всего: 317
Репутация: 1
Всего: 109
А это я немного поиздевался.
Правила форума "Linux/UNIX: Администрирование" | |
| Этот форум предназначен для решения вопросов по администрации *n?x-систем, в частности по настройке сложных сетей и обслуживанию серверного оборудования. |
- Вы должны соблюдать правила форума.
- Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
- Оскорблять запрещается.
- Религиозные войны в Религиозных войнах.
- Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).
В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.
[ Время генерации скрипта: 0.1458 ] [ Использовано запросов: 21 ] [ GZIP включён ]
не удается открыть файл manage.py: [Errno 2] Нет такого файла или каталога | Решено
Я пытаюсь открыть файл CSV, но по какой-то причине python не может его найти.
Вот мой код (это простой код, но я не могу решить проблему):
- 2 является address.csv в той же папке, что и ваш код Python (.py)? Вы используете относительный путь. Если это не так, вам нужно указать полный путь, например C:\folder\folder\address.csv
- если бы вы могли опубликовать точную ошибку, было бы легко ответить.
- 3 @Cyber Файл не относится к каталогу, содержащему исходный код. Это относительно рабочего каталога. По совпадению эти каталоги могут быть одинаковыми, но важно быть точным.
- Забыл прописать разрешение, после этого добавляю "wb" и работает нормально. Благодарность
Когда вы открываете файл с именем address.csv вы говорите open() функция, что ваш файл находится в текущем рабочем каталоге. Это называется относительным путем.
Чтобы дать вам представление о том, что это означает, добавьте это в свой код:
Это напечатает текущий рабочий каталог вместе со всеми файлами в нем.
Другой способ сказать open() функция, в которой находится ваш файл, использует абсолютный путь, например:
Вы используете относительный путь, что означает, что программа ищет файл в рабочем каталоге. Ошибка сообщает вам, что в рабочем каталоге нет файла с таким именем.
Попробуйте использовать точный или абсолютный путь.
- хорошо, это работает, но что, если вы хотите распространить код, чтобы люди могли его использовать? вы не можете ожидать, что абсолютный путь сработает в этом сценарии, верно?
- @AbhishtaGatya, в этом случае вам нужно настроить переменные среды для чтения текущего рабочего каталога!
Я столкнулся с этой ошибкой, потому что файл пуст. Этот ответ может быть неправильным ответом на этот вопрос, но должен дать подсказку разработчикам вроде меня.
Читайте также: