ㅤ
предыдущие посты о том, что это такое ищи по тегу #badpractices
В прошлом посте мы рассмотрели файлы, которые начинаются с дефиса и то, что команда
cp их может воспринимать как флаг. Ну дак вот.Как это победить мы с тобой уже знаем, завернуть в кавычки и кинуть два дефиса:
cp -- "$file" "$target"
Что означают 2 дефиса опять же смотри предыдущие посты по тэгу #badpractices
Ок. Минус этого метода — его нужно сука запомнить и не забывать использовать каждый раз при передачах файлов. Вообще не интуитивно.
Второй способ разруливания этой ситуации — указать путь к файлу.
Смотри. Если перед именем файла добавить
./ (означает текущую папку), то даже если файл называется -bashdays.txt он будет передан в команду правильно.for i in ./*.txt; do
cp "$i" /tmp
done
В этом случае
cp не затроит и выполнит задуманное.Ну и еще вариант на закуску.
Можно просто ебануть
./ перед именем файла при передачах в команду:for i in *.txt; do
cp "./$i" /tmp
done
Этот варик немного сэкономит ресурсы, тут не требуется дополнительных вычислений для обработки имен файлов. Но при условии, что у тебя немного файлов. Если их будет дохуя, то увы, будет тормозить.
Выводы
Лучший вариант — всегда указывать путь к файлу (относительный
./ или полный /home/user/...). Это избавит тебя от большинства проблем с файлами которые начинаются с дефиса.tags: #bash #badpractices #bestpractices
—
🔔 @bashdays➡️ @gitgate