LINUX.ORG.RU

Скрипт для переименования файлов

 


0

1

Здравствуйте! Да-да. Этот вопрос вечный :) Сразу объясню - не мой профиль, но волею судеб случилось, что я (а вернее 1С) стал виной косяка и мне надо его исправить. При переносе средствами 1С файлов из одно тома в другой, эта хреновина к вновь созданным файлам без расширений добавила строчку вконце и с довольным видом сообщила, что 600 файлов потеряны, а еще 600 лежат никому не нужные. Начал разбираться, и увидел, что ссылки на файлы без «.», а лежать с «.». Список файлов есть, думаю я, нужно всего лишь их переименовать и будет мне счастье?! Но вот день уже к концу, а bash так и не побежден. В общем, прошу помощи: есть файлик со списком файлов, следующего вида:

...
/attached-1c-files/ZP/20200428/A/Attachment_1.
/attached-1c-files/ZP/20200428/AL/Attachment_1.
/attached-1c-files/ZP/20200428/L/Attachment_1.
/attached-1c-files/ZP/20200428/X/Attachment_1.
/attached-1c-files/ZP/20210625/Attachment_1.
/attached-1c-files/ZP/20210625/X/Attachment_1.
/attached-1c-files/ZP/20210625/I/Attachment_1.
...

В нем, все файлы, которые надо переименовать - убрать точку в конце. Прошу помощи. Пивом могу обеспечить :)

Чтобы не показалось, что я просто ворвался и ничего не пробовал:) , вот:

#!/bin/bash
while read line1
do

line2=sed 's/.$//' $line1

mv $line1 $line2

done < listoffiles

что смог родить мой «гени» :) И, я сдаюсь…



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

обратные кавычки забыл в строке line2=

и двойные кавычки вокруг аргументов mv (всего 4 двойных кавычки)

вместо mv поставь echo и запусти скрипт (для проверки что всё верно) перед тем как запускать с mv

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Обратные - это ` - такие? :) Я пробовал echo, но из-за символов «/» фигню вообще показывает, воспринимая, видимо, что-то за спец-символы или ключи.

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

фигню показывало из-за того что обратные кавычки пропустил

line2=`команда`

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

Сработало!!!!!!!!!!!!!! Спасибо! Куда на пиво? :)

shamahn
() автор топика
Ответ на: комментарий от firkax
#!/bin/bash
while read line1
do

line2=`echo $line1 | sed 's/.$//'`

mv $line1 $line2

done < listoffiles

Во! Так тоже работает :) Хотел бы я сказать, что был очень близко - но нет. Спасибо!

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