Вы можете сделать это с помощью rename , он же Perl rename.
Попробуйте COPY ваших файлов во временном каталоге.
Если вы используете параметр -p
, он автоматически создаст для вас все необходимые каталоги.Если вы используете параметр --dry-run
, вы можете увидеть, что он будет делать, фактически ничего не делая.
rename --dry-run -p 'my @X=split /\./; $_=$X[1] . "/" . $_' hello*
Пример вывода
'hello.20190131.0000' would be renamed to '20190131/hello.20190131.0000'
'hello.20190137.0000' would be renamed to '20190137/hello.20190137.0000'
Все, что вам нужномы знаем, что он передает вам текущее имя файла в переменной с именем $_
и ожидает, что вы измените его, чтобы получить новое имя файла, которое вы хотели бы.
Итак, я разделил текущее имя на элементымассива X[]
с точкой (точка) в качестве разделителя:
my @X = split /\./
Это дает мне выходной каталог в $X[1]
.Теперь я могу установить новое имя файла, который я хочу, поместив новый каталог, косую черту и старое имя файла в $_
:
$_=$X[1] . "/" . $_
Вы также можете попробовать это, более короткая версия:
rename --dry-run -p 's/.*\.(\d+)\..*/$1\/$_/' hello*
- В ArchLinux используемый вами пакет называется
perl-rename
. - В Debian он называется
rename
- В macOS,используйте доморощенный вот так:
brew install rename