Как удалить файлы, начинающиеся с двойной дефис?

У меня есть некоторые файлы на моей машине Unix, которые начинаются с

-- 

eg --testings.html

Если я попытаюсь удалить его, я получаю следующую ошибку:

 cb0$ rm --testings.html rm: illegal option -- - usage: rm [-f | -i] [-dPRrvW] file ... unlink file 

Я пытался

 rm "--testings.html" || rm '--testings.html' 

но ничего не работает.

Как удалить такие файлы на терминал?

 rm -- --testings.html 

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

Это не относится к команде rm. Функция getopt реализует его, и многие (все?) Команды в стиле UNIX относятся к нему одинаково: -- завершает обработку опций и все, что является регулярным аргументом.

http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt

 rm -- --somefile 

Хотя это работает, это решение, основанное на rm с использованием getopts для parsingа его параметров. Есть приложения, которые проводят свой собственный анализ и тоже будут терпеть неудачу (потому что они могут не обязательно реализовывать логику « -- конец конца опций»).

Из-за этого решение, которое вы должны проехать через ваш череп, таково:

 rm ./--somefile 

Он всегда будет работать, потому что таким образом ваши аргументы никогда не начинаются с.

Более того, если вы пытаетесь сделать действительно приличные сценарии оболочки; вы должны технически ставить ./ перед всеми расширениями параметров вашего имени файла, чтобы ваши скрипты не прерывались из-за фанкового ввода имени файла (или для предотвращения их злоупотребления / использования для выполнения действий, которые они не должны делать: например, rm удалит файлы, но пропустит каталоги, в то время как rm -rf * удалит все. Передача имени файла -rf скрипту или кому-либо touch ~victim/-rf ‘ing может таким образом использоваться для изменения его поведения с помощью плохие последствия).

Либо rm -- --testings.html либо rm ./--testings.html .

 rm -- --testings.html 

Еще один способ сделать это – использовать find … -name “- *” -delete

 touch -- --file find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete 

Для более обобщенного подхода к удалению файлов с невозможными символами в имени файла, один из вариантов заключается в использовании inode файла.

Его можно получить через ls -i .

например

 $ ls -lai | grep -i test 452998712 -rw-r--r-- 1 dim dim 6 2009-05-22 21:50 --testings.html 

И стереть его, с помощью поиска:

 $ find ./ -inum 452998712 -exec rm \{\} \; 

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

 rm ./--testings.html 

или

 rm -- --testings.html