Есть ли быстрый способ изменить часть имени файла в каждом файле и папке в коллекции вложенных папок глубиной в несколько слоев?

256
Kirt

windows или linux, либо работает, он на внешнем диске либо умеет читать

например, изменить «version2» на «version3» в каждом файле и папке проекта?

Хотя в этом случае я хочу изменить инициалы пациента на «пациент-1» в каждом имени файла и имени папки, это десятки, сотни файлов, десятки гигабайт и около 10 пациентов (десять разных вещей, которые нужно изменить).

1

2 ответа на вопрос

0
Mureinik

В Linux я бы использовал, findчтобы найти все соответствующие файлы, а затем rename:

$ find . -name "*version2*" -exec rename version2 version3 {} \; 

РЕДАКТИРОВАТЬ:
Чтобы уточнить, согласно комментарию @ choroba ниже, это решение относится к rename (1), распространяемым как часть пакета util-linux.

Обратите внимание, что есть две разные команды `переименования` с совершенно разными значениями аргументов. choroba 6 лет назад 2
Что делать, если это только часть имени файла. то есть от "JS-sample2.txt" до "Patient1-sample2.txt" Kirt 6 лет назад 0
0
Kirt

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

"Это не так элегантно, как я надеялся, но оно заменяет" -kr "на" -patient-123 "в конце" * .txt "файлов"

находить . -типа f -iname '* .txt' | perl -ne 'chomp; мой $ orig = $ ; if (s / -kr (.txt) $ / - Patient-123 $ 1 /) '| xargs -0rn2 mv -i

«он только делает имена файлов, папки могут быть сделаны отдельно, как это:»

находить . тип d | так | perl -ne 'chomp; мой $ orig = $ ; if (s / -kr $ / - Patient-123 /) '| xargs -0rn2 mv -i