LINUX.ORG.RU

Изменение имен файлов

 ,


0

1

Имеется директория с кучей вложенных директорий и такой же кучей файлов. Все имеют разные расширения и любые названия. Требуется удлинить имена файлов до указанной длины заданным знаком (допустим, *). Помогите бедному студенту, пожалуйста :с



Последнее исправление: Impuling (всего исправлений: 1)

Знак * не лучший выбор. Я бы посоветовал использовать _

#!/bin/bash

LENGHT=20
FILES=$(find ./ -type f)
for FILE in $FILES
do
	NAME=$(basename $FILE)
	DIFF=$(($LENGHT - ${#NAME}))
	SUFF=$(printf "%${DIFF}s" | tr ' ' '_')
	NEWNAME=${NAME}${SUFF}
	DIR=$(dirname $FILE)
	mv $FILE ${DIR}/${NEWNAME}
done

Пробелы, исключения в случае, если существующее имя уже длинее заданной величины и подобное уже сам.

shell-script ★★★★★
()

perl + File::Find + rename()

use File::Find;

my $maxlen = 20;
my $symbol = '*';

sub handler {
  return unless -f $_;
  my ($name, $ext) = ($_ =~ m{(.*)\.([a-z0-9]+)$}o);
  return unless $ext;
  return if length($name) >= $maxlen;
  $name .= $symbol x ($maxlen - length($name));
  rename($_ => "${name}.${ext}")
    or warn "rename: $_ -- $!\n";
}

File::Find::find({wanted => \&handler}, '/dir');
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.