У меня небольшая проблема с переименованием группы файлов в папке. Сценарий:
for file in $1
do
mv $file $file | sed -r 's/^.{20}//' | sed 's/.\{16\}$//'
done
Вывод:
mv: cannot move `/home/timothy/Videos/DB/' to a subdirectory of itself, `/home/timothy/Videos/DB/DB'
Команда SED верна, просто я что-то не так делаю с параметрами mv.
Это имена первых 5 файлов:
[a-s]_dragon_ball_-_001_-_the_secret_of_the_dragon_balls__rs2_[4FC1375C]
[a-s]_dragon_ball_-_002_-_the_emperors_quest__rs2_[59F9C743]
[a-s]_dragon_ball_-_003_-_the_nimbus_cloud_of_roshi__rs2_[0C592F5F]
[a-s]_dragon_ball_-_004_-_oolong_the_terrible__rs2_[47CE4923]
[a-s]_dragon_ball_-_005_-_yamcha_the_desert_bandit__rs2_[B6A035BF]
И так и должно быть:
001_-_the_secret_of_the_dragon_balls
002_-_the_emperors_quest
003_-_the_nimbus_cloud_of_roshi
004_-_oolong_the_terrible
005_-_yamcha_the_desert_bandit
Я предполагаю, что у вас есть файлы, например,
[a-s]_dragon_ball_-_001_-_the_secret_of_the_dragon_balls__rs2_[4FC1375C]
[a-s]_dragon_ball_-_002_-_the_emperors_quest__rs2_[59F9C743]
[a-s]_dragon_ball_-_003_-_the_nimbus_cloud_of_roshi__rs2_[0C592F5F]
[a-s]_dragon_ball_-_004_-_oolong_the_terrible__rs2_[47CE4923]
[a-s]_dragon_ball_-_005_-_yamcha_the_desert_bandit__rs2_[B6A035BF]
Эти файлы имеют [a-s] в начале. И вы хотите, чтобы они после переименования, как, (согласно вашему комментарию)
001_-_the_secret_of_the_dragon_balls
002_-_the_emperors_quest
003_-_the_nimbus_cloud_of_roshi
004_-_oolong_the_terrible
005_-_yamcha_the_desert_bandit
Используйте этот сценарий ниже,
#!/bin/bash
for file in [\[a\-s\]]*
do
newfile=`echo "$file" | sed -r "s/^.{20}//" | awk -F "__rs2" '{print $1}'`
mv $file $newfile
done
Как это работает
Этот скрипт сканирует все имена файлов в текущем каталоге, который начинается с «[as]». Далее внутри цикла for для каждого отсканированного имени файла скрипт создает новое имя файла, оставляя первые 20 символов фильтрованными через sed
, и обрезает часть, начиная со строки «__rs2». Это удаляет ненужные части в названии. И, наконец, файлы переименовываются в новое имя файла один за другим.
Использование
Сохраните код как rename_file.sh
. (Скажем) Затем поместите его в тот же каталог, где находятся все эти файлы. Дайте разрешение на выполнение скрипта. Запись в терминал,
chmod +x rename_file.sh
Наконец, чтобы переименовать файлы, просто напишите в терминал,
./rename_file.sh
Готово.
Посмотрите, работает ли это для вас
#! /bin/bash
for file in "$1"
do
target_name=$(echo "$file" | sed -r 's/^.{20}//' | sed 's/.\{16\}$//')
mv "$file" "$target_name"
done