Невозможно переместить файл в сам подкаталог

У меня небольшая проблема с переименованием группы файлов в папке. Сценарий:

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
0
задан 2 December 2013 в 13:16

2 ответа

Я предполагаю, что у вас есть файлы, например,

[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

Готово.

0
ответ дан 2 December 2013 в 13:16

Посмотрите, работает ли это для вас

#! /bin/bash
for file in "$1"
do
    target_name=$(echo "$file" | sed -r 's/^.{20}//' | sed 's/.\{16\}$//')
    mv "$file" "$target_name"
done
0
ответ дан 2 December 2013 в 13:16

Другие вопросы по тегам:

Похожие вопросы: