Я хотел бы переименовать все каталоги в том же каталоге, если каталог соответствует шаблону, то шаблон для поиска будет user1 [files.sentfrom.com] -
Пример:
user1 [files.sentfrom.com] - Directory-Subject
Имя каталога:
user1 [files.sentfrom.com] - Directory-Subject
Вот предыдущее изображение каталога.
Я хочу переименовать имя каталога, чтобы оно выглядело следующим образом:
Directory-Subject (this could have different type of text)
Вот изображение после с переименованными каталогами, обратите внимание, что оно не переименовывает другие папки или файлы в каталоге.
Можно ли это сделать в regex все сразу или мне нужен цикл for Я открыт для другого способа.
Thanks
for name in *\[*\]\ -\ *; do
if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then
mv "$name" "${name#* - }"
fi
done
Приведенный выше цикл, который работал бы в bash
или ksh93
по крайней мере, перебирает все имена в текущем каталоге, соответствующие шаблону подстановки имен файлов * \ [* \ ] \ - \ *
(скобки и пробелы необходимо экранировать в оболочке) и тесты, чтобы убедиться, что это каталог и что измененное имя еще не существует. Если все в порядке, он переименовывает каталог.
Расширение параметра $ {name # * -}
примет значение переменной name
и удалит все от начала до первого появления ␣ -␣
(пробел-тире-пробел).
Вы можете использовать rename
для этого:
rename 's/.* ([^ ]*)$/$1/' *
Он удалит каждый символ до последнего пробела в каждом имени файла в каталоге.
find и rename - это мощная команда. С опцией -0
все возможные имена файлов обрабатываются чисто:
find -maxdepth 1 -type d -print0 | xargs -0 rename s/.*Directory-/Directory-/