Как я удаляю несколько файлов с общим префиксом и суффиксом?

Нет ничего, что делает все это, но rwhod запустили Вас.

Выполненный rwhod на всех узлах. На любом выполненном узле rwho видеть, кто вошел в систему на всех узлах.

22
07.05.2014, 00:19
3 ответа
rm sequence_1*.hmf

удаляет начало файлов sequence_1 и окончание .hmf.


Globbing является процессом, в котором Ваша оболочка берет шаблон и разворачивает его в список имен файлов, соответствующих тому шаблону. Не путайте его с регулярными выражениями, который отличается. Если Вы проводите большую часть своего времени в bash, Wiki Wooledge имеет хорошую страницу на globbing (расширение пути). Если Вы захотите максимальную мобильность, то Вы захотите считать спецификацию POSIX на сопоставлении с образцом также / вместо этого.


В маловероятном случае Вы сталкиваетесь со "Списком аргументов слишком долго" ошибка, можно смотреть на BashFAQ 95, который обращается к этому. Самое простое обходное решение должно разбить шаблон шарика в несколько меньших блоков, пока ошибка не уходит. В Вашем случае Вам могло, вероятно, сойти с рук разделение соответствия цифрами префикса 0 до 9, следующим образом:

for c in {0..9}; do rm sequence_1_"$c"*.hmf; done
rm sequence_1*.hmf  # catch-all case
29
27.01.2020, 19:42
  • 1
    Это - очень умная работа вокруг 'списка аргументов слишком долго' ошибка. В моем случае у меня есть двадцать тысяч файлов, таким образом, я предполагаю, что должен был бы использовать для цикла от 0.., 20.Правильно? Право –  Paul 26.04.2012, 17:18
  • 2
    @Paul, просто повредите список в столько блоков, сколько Вам нужно, хотя в какой-то момент find подход становится легче, чем предположение и проверка. –  jw013 26.04.2012, 17:24

Хотя ответ jw013 является корректным w.r.t globbing, та команда может перестать работать, если у Вас есть тысячи соответствий: расширенная командная строка rm sequence_1_0001.hmf sequence_1_0002.hmf ... сгенерированный оболочкой может просто быть слишком большим.

Как предложенный Dom, можно также использовать -delete опция с find:

find . -maxdepth 1 -type f -name 'sequence_1*.hmf' -delete

Оба -maxdepth и -delete, в то время как не в POSIX стандарт довольно распространены в find реализации в дикой природе. Дистрибутивы Linux обычно используют GNU find, который, конечно, поддерживает те опции.

14
27.01.2020, 19:42
  • 1
    Если Вы можете, использовать - удаляют опцию для находки, она не разветвляется для каждого файла... –  Dom 26.04.2012, 17:08
  • 2
    Добавленный, аплодисменты. Похож -delete должен поддерживаться на недавнем GNU и системах BSD, в то время как -print0 только для GNU. Таким образом, это вероятно более портативный также (хотя это не должно иметь значения для OP). –  Useless 26.04.2012, 18:13
  • 3
    По крайней мере, находка OS X имеет-print0, но это не включено в POSIX. –  Lri 03.04.2013, 23:26
rm sequence_1_{0000..0999}.hmf
rm sequence_1_{1000..1999}.hmf
rm sequence_1_{2000..2999}.hmf
...

работал бы также в Bash.

5
27.01.2020, 19:42
  • 1
    Расширение фигурной скобки требует bash, и нуль дополнил версию 4 потребностей формы, я верю. –  jw013 27.04.2012, 02:45

Теги

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