переименовать командные файлы в папке с помощью текстового файла - PullRequest
2 голосов
/ 08 мая 2020

У меня есть папка с файлами, которые начинаются с определенных c строк, и я хотел бы заменить часть их строк, используя соответствующий столбец из текстового файла

Папка с файлами

 ABC_S1_002.txt
 ABC_S1_003.html
 ABC_S1_007.png
 NMC_D1_002.png
 NMC_D2_003.html

И у меня есть текстовый файл, в котором строки должны быть заменены как:

ABC ABC_newfiles
NMC NMC_extra

Итак, папка после переименования будет

 ABC_newfiles_S1_002.txt
 ABC_newfiles_S1_003.html
 ABC_newfiles_S1_007.png
 NMC_extra_D1_002.png
 NMC_extra_D2_003.html

Я пробовал файл за файлом, используя mv

for f in ABC*; do mv "$f" "${f/ABC/ABC_newfiles}"; done

Как я могу прочитать текстовый файл, в котором есть старые строки в первом столбце, и заменить их новыми строками из второго столбца? Я пробовал

IFS=$'\n'; for i in $(cat file_rename);do oldName=$(echo $i | cut -d $'\t' -f1);  newName=$(echo $i | cut -d $'\t' -f2); for f in oldName*; do mv "$f" "${f/oldName/newName}"; done ; done

Но не сработало.

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Это может сработать для вас (параллельное и переименование GNU):

parallel --colsep ' ' rename -n 's/{1}/{2}/' {1}* :::: textFile

Это перечислит команды переименования для каждой строки в textFile.

После того, как вывод был отметьте, удалите параметр -n и запустите его по-настоящему.

Для решения sed попробуйте:

sed -E 's#(.*) (.*)#ls \1*| sed "h;s/\1/\2/;H;g;s/\\n/ /;s/^/echo mv /e"#e' testFile

Опять же, это будет echo команды mv, один раз проверил, удалите echo и запустите по-настоящему.

1 голос
/ 08 мая 2020

Просмотрите результат

sed -r 's#([^ ]*) (.*)#for f in \1*; do mv "$f" "${f/\1/\2}"; done#' textfile

Когда все будет хорошо, вы можете скопировать и вставить результат или обернуть его в source:

source <(sed -r 's#([^ ]*) (.*)#for f in \1*; do mv "$f" "${f/\1/\2}"; done#' textfile)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...