Описание тега cross-chain-recovery
У меня есть каталог с кучей файлов, которые хранятся в подкаталогах в соответствии с их именем, т. е.:
20d1/d325/52d1/20d1d32552d1a95249e62662fbdf924dd72c4027.jpg
ccaf/13cf/3199/ccaf13cf319930e80f5f2ad02525b93e1326c160.jpg
ec07/53bd/2355/ec0753bd2355fa8ec5cf5163e219c162cce3b03a.jpg
...
Как видите, первые 12 символов имени файла используются для создания трех уровней подкаталогов. К сожалению, четыре символа в имени каталога были выбраны, и как это произойдет, количество файлов превышает предел каталоге 32000 записей на каталог в файловой системе. Поэтому они должны быть переписаны, чтобы:
20d/1d3/255/2d1/20d1d32552d1a95249e62662fbdf924dd72c4027.jpg
cca/f13/cf3/199/ccaf13cf319930e80f5f2ad02525b93e1326c160.jpg
ec0/753/bd2/355/ec0753bd2355fa8ec5cf5163e219c162cce3b03a.jpg
...
Так что три буквы в каталог вместо четырех. Есть куча файлов, поэтому процесс должен быть максимально быстрым.
Я баловался с найти
:
найти /путь/к/файлам -mindepth 4 -тип F -regextype в POSIX-расширенного регулярного выражения \
".*/([0-9а-Ф]{4}/){3}(([0-9а-Ф]{3})([0-9а-Ф]{3})([0-9а-Ф]{3})([0-9а-Ф]{3})[0-9а-Ф]+\.\ж+)"
Печатает красиво все файлы, но я не уверен, как поступить с переписыванием. Я хотел бы использовать регулярное выражение группы захвата в процессе переписать переписать путь к $3/$4/$5/$6/$2
(обратные ссылки, чтобы найти
регулярное выражение). Но найти
, кажется, не поддерживает что-то вроде:
найти ... -экзек СР {} /в другом месте/$3/4$/$5/6$/$2 ;
Что это лучший подход, чтобы справиться с этим? Некоторые комбинации СЭД
и команды xargs
(я не очень опытный с этим)? Должен ли я идти на петлю, а не найти
действия? Я немного потерял.