Создать имя каталога на основе других других каталогов

У меня есть каталоги:

  • Foo
  • плата

но у меня также есть несколько каталогов с именами вроде:

  • Ipsum – Lorem
  • Долор – Сидеть

Если каталог не содержит дефис, следует игнорировать. Если в каталоге есть дефис: Mkdir Ipsum; mv Ipsum \ – \ * Ipsum

Это возможно?

Измените для пояснения: если есть каталог с дефисом, я хочу создать новое имя каталога на основе предварительной дефисы части, а затем переместить ВСЕ каталоги, которые включают в себя предварительно дефисную часть в этот новый каталог.

2 Solutions collect form web for “Создать имя каталога на основе других других каталогов”

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

$ {parameter %% word} Удалить соответствующий шаблон суффикса.

for f in *;do mv "$f" "${f%% -*}" done 

Да, это возможно. Вставьте такой код в файл, скажем, fix-dashes.sh (я нахожусь в Mac OS, но это должно работать на других Unices):

 #!/bin/bash SAVEIFS=$IFS IFS=$(echo -en "\n\b") trap 'IFS=$SAVEIFS' 0 for i in $@ do echo Processing $i case $i in *-*) echo "'$i' has a dash" destname=$(echo "$i" | sed 's/ -.*//') echo mv "$i" $destname mv "$i" $destname ;; esac done 

Затем bash fix-dash.sh */ переименует каталоги, как вы указали. Слэш важно, так что вы получите только имена каталогов, иначе будут затронуты обычные файлы с тире.

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

Мне нравится использовать ограниченный механизм регулярных выражений, потому что он имитирует RE, используемые bash в командной строке. В этом случае только имена, содержащие тире, вызовут переименование.

Команда sed выполняет преобразование, в этом случае заменяя все после первого нулевой строкой.

  • Где я могу найти хороший шаблон bashrc?
  • Понимание командной строки Bash's Read-a-File
  • Хранить stdout в переменной и отправлять команду на фоновый
  • Как суммировать значения двух строк в строке в linux
  • Вы можете указать «здесь документ»?
  • Ошибка grep: операнд оператора повторения недействителен
  • Скрипты `rm` и` rm -i`
  • Расширение имени файла для печати с помощью -exec в поиске
  • regexp в ksh для расширений tgz, tar.tgz
  • Bash regex, строка соответствия из двух строк
  • Как получить записи таблицы psql в сценарии оболочки?
  • Linux и Unix - лучшая ОС в мире.