Переименование каталогов по шаблону

Я хотел бы переименовать все каталоги в том же каталоге, если каталог соответствует шаблону, то шаблон для поиска будет user1 [files.sentfrom.com] - Пример:

user1 [files.sentfrom.com] - Directory-Subject

Имя каталога:

user1 [files.sentfrom.com] - Directory-Subject

Вот предыдущее изображение каталога. Before image

Я хочу переименовать имя каталога, чтобы оно выглядело следующим образом:

Directory-Subject (this could have different type of text)

Вот изображение после с переименованными каталогами, обратите внимание, что оно не переименовывает другие папки или файлы в каталоге. Here's the after image when it's renamed notice it doesn't rename anything else in the directory

Можно ли это сделать в regex все сразу или мне нужен цикл for Я открыт для другого способа.

Thanks

0
11.02.2017, 17:54
3 ответа
for name in *\[*\]\ -\ *; do
  if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then
    mv "$name" "${name#* - }"
  fi
done

Приведенный выше цикл, который работал бы в bash или ksh93 по крайней мере, перебирает все имена в текущем каталоге, соответствующие шаблону подстановки имен файлов * \ [* \ ] \ - \ * (скобки и пробелы необходимо экранировать в оболочке) и тесты, чтобы убедиться, что это каталог и что измененное имя еще не существует. Если все в порядке, он переименовывает каталог.

Расширение параметра $ {name # * -} примет значение переменной name и удалит все от начала до первого появления ␣ -␣ (пробел-тире-пробел).

1
28.01.2020, 02:34

Вы можете использовать rename для этого:

rename 's/.* ([^ ]*)$/$1/' *

Он удалит каждый символ до последнего пробела в каждом имени файла в каталоге.

1
28.01.2020, 02:34

find и rename - это мощная команда. С опцией -0 все возможные имена файлов обрабатываются чисто:

find -maxdepth 1 -type d -print0 | xargs -0 rename s/.*Directory-/Directory-/
1
28.01.2020, 02:34

Теги

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