LINUX.ORG.RU

Из командной как это сделать?

 


0

2

есть файлы, имена которых в base64, как их переименовать? пока только декодирование додумал как сделать

=Xutf-8XBXQUEuQjI3MDYyMDE2LnR4dA==X=
=Xutf-8XBXQUEyNzA2MjAxNi50eHQ=X=

find . -type f -name '*utf-8*'  -printf '%f\n'  | sed 's/^=Xutf-8XBX//; s/X=$//' | base64 -d
как то наверное через xargs же можно

echo "=Xutf-8XBXQUEuQjI3MDYyMDE2LnR4dA==X="| while read file; do 
 target=`echo ${file:10:-2}|base64 -d`; 
 echo mv $file $target;
done;

это все в одну строчку find вместо первого echo, а второй надо убрать и обработать на случай пробелов 8)

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)

банально в цикле перебрать, необязательно киллометровые пайпы собирать даже

anonymous ()
Ответ на: комментарий от Deleted

subwoofer
а второй надо убрать и обработать на случай пробелов

не понял, о чем речь?

wolverin ()
Ответ на: комментарий от anonymous

банально в цикле перебрать

не покажите пример этой банальщины?

wolverin ()
Ответ на: комментарий от wolverin

тогда еще рано пользоваться моим ответом, а сначала надо почитать мануалы по bash

Deleted ()
Ответ на: комментарий от wolverin

он говорит делай так:

find . -type f -name '*utf-8*'  -printf '%f\n'  | while read file; do 
 target=`echo ${file:10:-2}|base64 -d`; 
 echo mv $file $target;
done;

этот код не переименовыает, а только печатает что хочет делать. если ошибок не будет - то переименовывай файлы:
find . -type f -name '*utf-8*'  -printf '%f\n'  | while read file; do 
 target=`echo ${file:10:-2}|base64 -d`; 
 mv $file $target;
done;

bl ★★★ ()
Ответ на: комментарий от bl

bl

да это понятно, он говорит второй эхо убрать, а не третий

wolverin ()
Ответ на: комментарий от Deleted

А почему не

mv "$file" "$target"
? Это же должно снять проблему пробелов.

deadskif ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.