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

Если я правильно понимаю ваш сценарий использования, вы можете использовать класс типов Cats по умолчанию Show или, если вам нужно больше настраиваемого поведения, вы можете напрямую использовать обобщенную деривацию с помощью Shapeless для достижения того, что вам нужно.

Для более легкого сценария Cat Show читайте здесь .

Как вы можете читать, он имеет синтаксис, который позволит вам сделать myObject.show для любого T, который имеет Show[T] в области видимости.

Если вы хотите более настраиваемое поведение, вы можете попробовать перейти непосредственно к Shapeless. Пример того, что вам нужно, можно найти в в этом примере Show type-class , и вы можете увидеть, что он работает здесь .

С учетом этих классов дел:

  sealed trait Super
  case class Foo(i: Int, s: String) extends Super
  case class Bar(i: Int) extends Super
  case class BarRec(i: Int, rec: Super) extends Super

  sealed trait MutualA
  case class MutualA1(x: Int) extends MutualA
  case class MutualA2(b: MutualB) extends MutualA

  sealed trait MutualB
  case class MutualB1(x: Int) extends MutualB
  case class MutualB2(b: MutualA) extends MutualB

Будет напечатано:

Bar(i = 0)   
BarRec(i = 1, rec = Foo(i = 0, s = foo))   
MutualA2(b = MutualB2(b = MutualA1(x = 0)))

66
задан SilentGhost 2 April 2009 в 10:55
поделиться

7 ответов

rm -- --testings.html

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

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

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

141
ответ дан likeitlikeit 24 November 2019 в 14:46
поделиться
rm -- --somefile

В то время как это работает, это - решение, которое полагается rm использование getopts для парсинга его опций. Существуют приложения там, которые делают их собственный парсинг и будут рвать на том также (потому что они не могли бы обязательно реализовать"-- конец средств опций" логика).

Из-за этого решение, необходимо проехать череп, является этим:

rm ./--somefile

Это будет всегда работать, потому что этот путь Ваши аргументы никогда не начинается с a -.

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

55
ответ дан lhunath 24 November 2019 в 14:46
поделиться

Также rm -- --testings.html или rm ./--testings.html.

17
ответ дан Keith Thompson 24 November 2019 в 14:46
поделиться
rm -- --testings.html
7
ответ дан Juliano 24 November 2019 в 14:46
поделиться

Еще один способ сделать это состоит в том, чтобы использовать, находят... - имя "-*" - удаляет

touch -- --file 
find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete 
4
ответ дан 24 November 2019 в 14:46
поделиться
rm ./--testings.html

или

rm -- --testings.html
1
ответ дан Keith Thompson 24 November 2019 в 14:46
поделиться

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

Его можно получить с помощью ls -i .

например

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

И стереть его с помощью find:

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

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

3
ответ дан 24 November 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: