Обработка файла с именем, начинающимся с “-” (в данном случае разархивировать)

Вопрос или проблема

Я использую Debian bullseye на VPS.

Я хочу массово проверить целостность многих zip-файлов, автоматически загруженных с веб-сайта. К сожалению, некоторые из этих файлов имеют имена, начинающиеся с -, например, -example-file.zip.

Когда я выполняю unzip -t -example-file.zip или unzip -t "-example-file.zip", unzip воспринимает имя файла как параметры и не пытается обработать этот файл. То же самое происходит и с другими командами (пробовал touch).

Кроме скрипта массового переименования на языке, не являющемся Shell, как можно обработать такие файлы?

У вас есть несколько вариантов:

  1. Добавить префикс ./ или абсолютный путь

    unzip -t ./-example-file.zip
    
  2. Использовать --, чтобы остановить разбор параметров

    unzip -t -- -example-file.zip
    

Когда я сталкивался с этим раньше, я обычно просто выполнял команду с подстановочным знаком ( ls ?example-file.zip ). Я не знаю, будет ли это работать с unzip, но это точно работает с mv и ln – так что вы можете получить доступ к данным через другое имя.

Ответ или решение

Если вы работаете с файлами, имена которых начинаются с символа "-" (например, "-example-file.zip") в Debian Bullseye и сталкиваетесь с проблемами при их обработке (например, при проверке целостности с помощью команды unzip), есть несколько способов решить эту задачу.

  1. Префикс с ./ или абсолютным путем:
    Компании Linux интерпретируют имена файлов, которые начинаются с "-", как аргументы командной строки. Чтобы избежать этого, вы можете указать относительный путь к файлу, добавив ./ перед именем файла. Например:

    unzip -t ./-example-file.zip

    Либо вы можете использовать абсолютный путь:

    unzip -t /path/to/-example-file.zip
  2. Используйте -- для завершения разбора опций:
    Команды в Linux позволяют использовать двойной дефис --, чтобы указать конец ввода параметров и начало имени файла. Используя этот метод, вы можете выполнить команду следующим образом:

    unzip -t -- -example-file.zip
  3. Использование подстановочных знаков:
    Вы можете использовать символы подстановки, чтобы обратиться к файлу, не включая его полное имя. Например, если у вас нет других файлов, которые начинаются с "-" в текущей директории, вы можете выполнить:

    ls ?example-file.zip

    Если это работает, попробуйте:

    unzip -t ?example-file.zip

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

Оцените материал
Добавить комментарий

Капча загружается...