Вопрос или проблема
Я использую Debian bullseye на VPS.
Я хочу массово проверить целостность многих zip-файлов, автоматически загруженных с веб-сайта. К сожалению, некоторые из этих файлов имеют имена, начинающиеся с -
, например, -example-file.zip
.
Когда я выполняю unzip -t -example-file.zip
или unzip -t "-example-file.zip"
, unzip воспринимает имя файла как параметры и не пытается обработать этот файл. То же самое происходит и с другими командами (пробовал touch
).
Кроме скрипта массового переименования на языке, не являющемся Shell, как можно обработать такие файлы?
У вас есть несколько вариантов:
-
Добавить префикс
./
или абсолютный путьunzip -t ./-example-file.zip
-
Использовать
--
, чтобы остановить разбор параметровunzip -t -- -example-file.zip
Когда я сталкивался с этим раньше, я обычно просто выполнял команду с подстановочным знаком ( ls ?example-file.zip
). Я не знаю, будет ли это работать с unzip, но это точно работает с mv
и ln
– так что вы можете получить доступ к данным через другое имя.
Ответ или решение
Если вы работаете с файлами, имена которых начинаются с символа "-" (например, "-example-file.zip") в Debian Bullseye и сталкиваетесь с проблемами при их обработке (например, при проверке целостности с помощью команды unzip
), есть несколько способов решить эту задачу.
-
Префикс с
./
или абсолютным путем:
Компании Linux интерпретируют имена файлов, которые начинаются с "-", как аргументы командной строки. Чтобы избежать этого, вы можете указать относительный путь к файлу, добавив./
перед именем файла. Например:unzip -t ./-example-file.zip
Либо вы можете использовать абсолютный путь:
unzip -t /path/to/-example-file.zip
-
Используйте
--
для завершения разбора опций:
Команды в Linux позволяют использовать двойной дефис--
, чтобы указать конец ввода параметров и начало имени файла. Используя этот метод, вы можете выполнить команду следующим образом:unzip -t -- -example-file.zip
-
Использование подстановочных знаков:
Вы можете использовать символы подстановки, чтобы обратиться к файлу, не включая его полное имя. Например, если у вас нет других файлов, которые начинаются с "-" в текущей директории, вы можете выполнить:ls ?example-file.zip
Если это работает, попробуйте:
unzip -t ?example-file.zip
Эти методы помогут вам обработать файлы, имена которых начинаются с "-", без необходимости их переименования. Выберите наиболее удобный для вашего случая способ.