Я вроде как новичок в unix shell, и я не могу найти ответ на мою проблему :
У меня есть папка, содержащая несколько файлов: правильное имя файла содержит ровно 13 символов (цифры + буквы + подчеркивание). Например :
1305359000_PS.JPG
Некоторые файлы названы неправильно, ошибка всегда в последних символах, например:
9009015000_PS_1.jpg
Мне нужно запустить команду find / replace, которая будет работать так для всех файлов в моей папке :
ЕСЛИ имя файла > 13 символов (без расширения), то удалите все символы после 13-го.
Я попробовал несколько команд с mmv и awk, но пока застрял.
Edit : забыл уточнить, команда должна учитывать пробел(ы) в имени файла и удалять их, если они присутствуют.
Возможно, есть и другое наиболее быстрое решение. Этот код не учитывает наличие пробела в имени файла. Но вы можете попробовать следующий код:
SHW@SHW:/tmp # for i in `find /home/user -type f`
do
mv $i `echo $i | cut -c -13`.`$i | rev | cut -d'.' -f 1 | rev`
done
Предполагая, что вы используете оболочку bash
(shopt -s globstar; rename --no-act 's/^(.{13}).*/$1\.jpg/' **/*)
(....)
означает, что параметр shopt -s globstar
применим только к этому одна команда - если по какой-то причине подстановка уже не включена.
При использовании zsh
rename --no-act 's/^(.{13}).*/$1\.jpg/' **/*
переключатель - no-act
даст предварительный просмотр того, что переименовать
] потенциально подойдет.
Если вас устраивают предлагаемые изменения, удалите -no-act
, и ваши файлы будут массово переименованы.