Não é possível mover o arquivo para o subdiretório dele mesmo

0

Estou com um pequeno problema ao renomear um monte de arquivos em uma pasta. O script:

for file in $1 
do
    mv $file $file | sed -r 's/^.{20}//' | sed 's/.\{16\}$//'
done

A saída:

mv: cannot move '/home/timothy/Videos/DB/' to a subdirectory of itself, '/home/timothy/Videos/DB/DB'

O comando SED está correto, é só que estou fazendo algo errado com os parâmetros mv.

Estes são os nomes dos primeiros 5 arquivos:

[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]

E isso deve se tornar isso:

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
    
por Noosrep 01.12.2013 / 10:37

2 respostas

3

Estou supondo que você tenha arquivos como

[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]

esses arquivos têm [a-s] no começo. E você os quer após renomear como (de acordo com seu comentário)

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

Use este script abaixo,

#!/bin/bash
for file in [\[a\-s\]]*
do
    newfile='echo "$file" | sed -r "s/^.{20}//" | awk -F "__rs2" '{print $1}''
    mv $file $newfile
done

Como funciona

Este script varre todos os nomes de arquivos no diretório atual que começa com "[a-s]". Em seguida, dentro de loop para cada nome de arquivo varrido, o script cria um novo nome de arquivo, deixando os primeiros 20 caracteres filtrados por sed e cortando a parte que começa com a string "__rs2". Isso remove partes indesejadas do nome. E, por fim, os arquivos são renomeados para o novo nome de arquivo, um por um.

Uso

Salve o código como rename_file.sh . (diga) Em seguida, coloque-o no mesmo diretório onde estão todos esses arquivos. Dê a permissão de execução de script. Escreva no terminal,

chmod +x rename_file.sh

Finalmente, para renomear os arquivos, basta escrever no terminal

./rename_file.sh

Feito.

    
por souravc 01.12.2013 / 20:26
0

Veja se isso funciona para você

#! /bin/bash
for file in "$1"
do
    target_name=$(echo "$file" | sed -r 's/^.{20}//' | sed 's/.\{16\}$//')
    mv "$file" "$target_name"
done
    
por Marcus Rickert 01.12.2013 / 15:45

Tags