Переименовать большую часть папки, если соответствует содержимое файла - PullRequest
0 голосов
/ 20 апреля 2020

У меня 6000 папок. Примеры:

Niceman Production
Jingle Production
Watch Production

У меня есть файл, содержащий:

Title: Watch Production Code: SL-990
Title: Jingle Production Code: UOP-222
Title: Niceman Production Code: KP-290

Что мне нужно сделать, это переименовать папки выше, если их имя соответствует строке из этого файла. Новое имя должно быть таким:

Niceman Production KP-290
Watch Production SL-990
Jingle Production UOP-222

Возможно ли в bash сценариях сделать это?

1 Ответ

0 голосов
/ 20 апреля 2020

Вот мое мнение об этом.

#!/usr/bin/env bash

##: Save the contents of the file in an array name contents
mapfile -t contents < file.txt 

##: Loop through the directories
while IFS= read -r -d '' directories; do
  for i in "${contents[@]}"; do ##: Loop through the file contents
    if [[ $i = *${directories#*./}* ]]; then ##: If they both match
      echo  mv -v "$directories" "$directories ${i##* }" ##: Rename to the desired output.
    fi
  done
done < <(find . ! -name . -type d -print0)  ##: Look for directories using find.
  • То же, что и @Oguz ismail, удалите echo, если считаете, что вывод правильный.

Пробный запуск.

mkdir -p /tmp/testing123 && cd /tmp/testing123
mkdir -p 'Niceman Production'
mkdir -p 'Jingle Production'
mkdir -p 'Watch Production'

Убедитесь, что script и файл находятся в одном каталоге.

bash ./myscript

Вывод

renamed './Watch Production' -> './Watch Production SL-990'
renamed './Niceman Production' -> './Niceman Production KP-290'
renamed './Jingle Production' -> './Jingle Production UOP-222'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...