Скрипт для добавления точек в конце некоторых каталогов - PullRequest
0 голосов
/ 04 февраля 2020

Предположим, у меня есть структура Directoriy:

Divulgation
├── Biology
│   └── Dawkins, C Richard
│       └── Books
├── Chemistry
│   └── Gray, Theodore W
│       └── Books
└── Physics
    ├── Hawking, Stephen W
    │   └── Books
    └── Sagan, Carl E
        └── Books

, и я хочу добавить точки в конце инициалов, например:

Divulgation
├── Biology
│   └── Dawkins, C. Richard
│       └── Books
├── Chemistry
│   └── Gray, Theodore W.
│       └── Books
└── Physics
    ├── Hawking, Stephen W.
    │   └── Books
    └── Sagan, Carl E.
        └── Books

Чтобы удалить их, это может быть что-то вроде этого:

shopt -s extglob  
shopt -s globstar 
for d in @(Divulgation)/**/*./    
do echo "mv \"$d\" \"${d%./}/\" " 
         mv "$d" "${d%./}/" 
done

Но, чтобы добавить их, я не знаю .. Не могли бы вы дать мне несколько советов? Спасибо

1 Ответ

0 голосов
/ 04 февраля 2020

BASH_REMATCH ваш друг:

Вот решение для случая, когда у вас есть только один средний инициал. Повторите это в al oop, если вы хотите перехватить их все:

if [[ $d =~ (.*\ [A-Z])($|\ .*) ]]
then
  new_name="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}"
fi    

После совпадения регулярного выражения bash заполняет массив BASH_REMATCH группами захвата регулярного выражения. Первая группа захватывает все, вплоть до пробела, за которым следует буква верхнего регистра, а вторая группа захватывает все остальное, а также следит за тем, чтобы после буквы также был пробел или что это была последняя буква. Другими словами: удостоверяется, что это было действительно изолированное письмо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...