переименование файлов без ** переименовывает ** команда

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

Прочитайте страницу справочника на pstree здесь.

Сигнализировать всем членам группы процесса: killpg(, );
где pgrp является числом группы процесса, и сигнал является сигналом.

Ожидать детей в указанной группе процесса: waitpid(-, &status, ...);

Альтернатива тому, что Вы делаете, должна выполнить Ваш контейнер процесса в новой оболочке удара. Создайте новую оболочку удара с командой bash и затем выполненный Ваши процессы. Когда Вы хотите, чтобы все процессы были закончены, вышли из оболочки с командой exit.

5
21.09.2016, 03:44
3 ответа

Можно найти информацию ${...} замены в странице справочника Вашей оболочки, например, колотите (1). Наиболее распространенное:

  • ${var#word} удалите самый короткий префикс: значение переменной var с word префикс (если таковые имеются) удаленный;

  • ${var%word} удалите самый короткий суффикс: значение переменной var с word суффикс удален (если таковые имеются).

  • ${var/pattern/replacement} удалите первое вхождение шаблона

  • ${var//pattern/replacment} удалите все случаи шаблона

Так, в Вашем примере ${f#image} расширяется до значения f (например, image01.png) удаление image префикс, таким образом, это приводит к значению 01.png.

word и replacement часть в ${...} расширения подвергаются тем же подстановочным расширениям как имена файлов; поэтому, если Вы хотите удалить пробелы и -, Вы могли использовать ${f//[ -]/} (замены любое возникновение символов и - с пустой строкой.

Все детали о странице справочника.

6
27.01.2020, 20:36
  • 1
    я получаю ошибку, что файлы не являются каталогом [jings] s0128943: для f в *.xml; сделайте mv $f $ {f//[-]/}; сделанный mv: цель MeasurementsPanama20090322Session10.xml' is not a directory mv: target MeasurementsPanama20090322Session1.xml' не является каталогом –  Vass 19.10.2010, 19:32
  • 2
    @Vass Начиная с Ваших имен файлов содержит пробелы, которые необходимо заключить им в кавычки, иначе оболочка расширится $f разделить слова Measurements, Panama, и т.д. и таким образом сделайте mv думайте, что Вы хотите переместить файлы Measuremens, Panama, и т.д. в синглMeasurementsPanama... который должен затем быть каталогом. Использовать for f in *.xml; do mv "$f" "${f//[ -]/}"; done вместо этого. (См. ответ Жабр также.) –  Riccardo Murri 20.10.2010, 00:37

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

rename 's/[- ]//g' *.xml

Однако Ваш сценарий работал бы, если бы Вы следовали за самым важным принципом программирования оболочки: все подстановки переменных должны быть дважды заключены в кавычки. (Почему Вам нужен этот дополнительный бит пуха синтаксиса? Поскольку существуют случаи, где Вы на самом деле хотите неупомянутое поведение. Но эти случаи довольно редки.)

for f in *.xml; do mv "$f" "${f//[ -]/}"; done

С zsh Вы не должны были бы писать цикл: Вы могли использовать удобное zmv функция.

autoload zmv
zmv '(*.xml)' '${1//[- ]/}'
2
27.01.2020, 20:36
  • 1
    большое спасибо. жемчуг немного вне меня, а также zsh, но другая часть является большой. –  Vass 20.10.2010, 01:57

Вы могли бы также использовать sed для создания нового имени. Там это было бы

for i in *.xml; do mv "$i" `echo "$i" | sed -e "s/[ -]//g"`; done
1
27.01.2020, 20:36
  • 1
    удерживаются от использования. Recommendet является $ (...) вместо этого, который легок к вложенному множеству и не так легок наблюдаться или перепутанным с apostrophs: for i in *.xml; do mv "$i" $(echo "$i" | sed -e "s/[ -]//g"); done –  user unknown 10.02.2011, 11:31

Теги

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