AWK - altera o nome do arquivo (caracteres especiais)

1

Eu tenho dois arquivos:

~/Pulpit/kot$ find . -name "*jpg" -printf "%f\n"
1.jpg
'[~!($%^_&*){.}\___"']'1.jpg

Eu quero mudar o nome deles para:

_home_pic_Pulpit_kot_1.jpg

_home_pic_Pulpit_kot_'[~!($%^_&*){.}\___"']'1.jpg

Eu uso este comando:

~/Pulpit/kot$ find $PWD -name "*.jpg" | mawk '{c=$0; gsub("/", "_", c)}{system("echo mv -v " $0 " " c)}'
mv -v /home/pic/Pulpit/kot/1.jpg _home_pic_Pulpit_kot_1.jpg
/bin/sh: Syntax error: word unexpected (expecting ")")

EDITAR:

Este comando funciona.

find $PWD -name "*.jpg" -exec bash -c 'mv "$0" "${0//\//_}"' {} \;

Como fazer o mesmo com o mawk?

EDIT-1:

Esta solução funciona:

find $PWD -name "*.jpg" | mawk 'a=$0{gsub("/", "_")}{system("mv -v '"'"'" a "'"'"'  '"'"'" $0 "'"'"'")}'
find $PWD -name "*.jpg" | mawk 'a=$0{gsub("/", "_")}{system("mv -v '\''" a "'\'' '\''" $0 "'\'' ")}'
find $PWD -name "*.jpg" | mawk 'a=$0{gsub("/", "_")}{system("mv -v 7" a "7 7" $0 "7 ")}'
    
por nowy 03.05.2012 / 12:42

1 resposta

0

Você provavelmente só precisará colocar aspas simples em torno dos argumentos do nome do arquivo em mv . É feio mas ...

mudar

system("echo mv -v " $0 " " c)

para

system("echo mv -v '"'"'" $0 "'"'"' '"'"'" c "'"'"'")
    
por 03.05.2012 / 16:16

Tags