Переименование группы файлов, но только часть заголовка
Мне нужно переименовать кучу файлов (около 167 Кб), и только часть заголовка в каждом файле. От: Aaaa.bb - 2 tag tag_tag 9tag
Aaaa.bb - 125 tag_tag 9tag
Aaaa.bb - 3567 tag 9tag
Для того, чтобы: Aaaa.bb - 000002 tag tag_tag 9tag
Aaaa.bb - 000125 tag_tag 9tag
Aaaa.bb - 003567 tag 9tag
Все на внешнем жестком диске. Есть ли какой-нибудь инструмент или сценарий, который может помочь мне в этой ситуации? Также забыл упомянуть, что я все еще новичок в Ubuntu и все эти хитрые вещи, поэтому я попрошу упростить ответы
4 ответа
Вот мой взгляд на это, используя bash
, awk
, а также mv
,
Если мы посмотрим на имя файла с точки зрения awk, имя файла - это просто строка с разделенными пробелами полями, и особый интерес представляет поле $3, которое должно быть дополнено нулями. Сценарий ниже делает именно это. Убедитесь, что вы разместили скрипт и запустили его в том же каталоге, что и файлы, которые вы хотите переименовать. Также убедитесь, что он исполняется с chmod 755 renamerScript.sh
демонстрация
testdir:$ ls
Aaaa.bb - 125 tag tag_tag 9tag Aaaa.bb - 2 tag tag_tag 9tag Aaaa.bb - 4207 tag tag_tag 9tag BACKUP/ renamerScript.sh*
testdir:$ ./renamerScript.sh
mkdir: cannot create directory ‘BACKUP’: File exists
cp: omitting directory ‘BACKUP’
renaming Aaaa.bb - 125 tag tag_tag 9tag to Aaaa.bb - 000125 tag tag_tag 9tag
renaming Aaaa.bb - 2 tag tag_tag 9tag to Aaaa.bb - 000002 tag tag_tag 9tag
renaming Aaaa.bb - 4207 tag tag_tag 9tag to Aaaa.bb - 004207 tag tag_tag 9tag
testdir:$ ls
Aaaa.bb - 000002 tag tag_tag 9tag Aaaa.bb - 000125 tag tag_tag 9tag Aaaa.bb - 004207 tag tag_tag 9tag BACKUP/ renamerScript.sh*
скрипт
#!/bin/bash
# renamerScript.sh
# Author: Serg Kolo
# Date: Oct 17, 2015
# Purpose : renaming specific files
# Written for: http://Ask-ubuntu.ru/q/686794/295286
# Make sure you have backup of the files !!!
# comment/uncomment if you do want to do a backup
mkdir BACKUP
cp -t BACKUP *
# This is where the magic happens:
# If we look at filenames from the awk point of view
# "Aaaa.bb - 2 tag tag_tag 9tag" are all really
# space-separated fields. Field #3 is the one we need to edit.
# What we can do is pad it with zeros and then chop off 6
# characters from the end, and store that as new filename
# The rest is just doing mv command from old filename to new
# And also making sure we're operating on files , not directories
# and not renaming the script file,too
for FILENAME in * ;
do
if [ -f "$FILENAME" -a "$FILENAME" != "renamerScript.sh" ]; then
OLDFILENAME="$FILENAME"
NEWFILENAME=$(echo "$FILENAME" | awk '{$3="00000"$3; len=(length($3)-5); $3=(substr($3,len)); print }')
printf "renaming $OLDFILENAME to $NEWFILENAME \n"
mv "$OLDFILENAME" "$NEWFILENAME"
fi
done
Я бы порекомендовал Python и с помощью регулярных выражений. Вот пример сценария, который я сделал, который может захватить все файлы в папке и подпапках.
directoryChosen = (sys.argv[1])
print directoryChosen + " thi is inside dollartohash"
if os.path.isdir(directoryChosen):
for n in os.listdir(directoryChosen):
if not n.startswith('.'):
newname = n.replace('$', '#')
print newname
if newname != n:
path = os.path.join(directoryChosen, n)
print path + " this is path"
target = os.path.join(directoryChosen, newname)
print target + " this is target"
os.rename(path, target)
newdir = directoryChosen.replace('$', '#')
print newdir
if directoryChosen != newdir :
os.rename(directoryChosen, newdir)
Как вы можете видеть, он принимает каталог в качестве аргумента и заменяет символ другим символом. Я уверен, что вы можете изменить замену детали.
Вы можете использовать Perl-based rename
команда для повторной печати последовательности цифр после пробела в нужном формате и ширине поля, например
rename -vn -- 's/ - (\d+)/sprintf " - %06d", $1/e' *
(флаг -n означает "нет операции", т. е. он просто выполнит пробный прогон для проверки выражения: удалите его, если / когда вы уверены, что оно работает правильно).
Попробуйте pyRenamer массовое переименование файлов, которое переименовывает файлы, используя шаблоны, замены, вставляет или удаляет текст, или даже переименовывает файлы вручную.
У этого есть окно GUI со следующими функциями:
- Шаблоны для переименования файлов. Поиск и замена, чтобы переименовать файлы. Вставьте и удалите символ в любом месте от имени файла. Заглавная буква (укажите имя файла в верхнем регистре). Общие замены. Вручную переименуйте выбранные файлы. Переименуйте изображения, используя их метаданные. Переименуйте музыку, используя ее метаданные. Источник
Установка: sudo apt-get install pyrenamer