Найти и переименовать файлы / папки с помощью регулярных выражений - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь найти правильное регулярное выражение для имени файла, которое начинается с I0 [0-9] [0-9] - например: "I097-".Я не знаком с регулярными выражениями, но использую онлайн, я придумал это [I] [0] [\ d] [\ d] [-], я уверен, что это не лучший шаблон регулярных выражений для моей строки, ноЯ протестировал с помощью онлайн-инструментов регулярных выражений, и это работает.Теперь я хочу использовать Linux 'find', чтобы найти все файлы, которые соответствуют этому регулярному выражению, и переименовать получившиеся файлы, заменив соответствующую строку ничем.

From:
I071-PTEN-7
./I071-PTEN-7/I071-PTEN-7.txt

To:
PTEN-7
./PTEN-7/PTEN-7.txt

command used:
find . -name "I0*" -type f -o -name "I0*" -type d -exec rename -n "s/[I][0][\d][\d][-]/''/" {} \;

Но, похоже, это не такничего, не уверен, что происходит.Любая помощь, чтобы найти проблему или решение будет принята с благодарностью.Спасибо.

1 Ответ

0 голосов
/ 26 ноября 2018

Используйте параметр -execdir, чтобы получать только записи имен файлов в find, также нет необходимости использовать класс символов вокруг каждого символа в вашем регулярном выражении.

find . -name 'I0*' -execdir rename -n 's/^I0\d\d-//' {} \;

Если rename не работаеттогда вы можете попробовать это:

find . -type f -name 'I0*' -execdir bash -c 'mv "$1" "${1/I0[0-9][0-9]-/}"' - {} \; &&
find . -name 'I0*' -execdir bash -c 'mv "$1" "${1/I0[0-9][0-9]-/}"' - {} \;
...