1

Тема: rename file in bash

Добрідень!
Посканував недавно кавалок книги, але віндозівська прога позберігала мені то всьо у форматі типу '?123.jpg', з пробілом попереду..
вручну перейменування виконується заклинанням

mv \ 123.jpg 123.jpg

Проте отих файликів маю мало не дві сотні sad Саме час вчитися писати скрипти...
Отже, мініатюрний скрипт..

#!/bin/bash
for X in *.jpg
do
mv '\ '$X $X
done

Прошу звернути увагу що для перейменування назву файлу ніяк не модифікував, оскільки команда mv і так проігнорує всі непотрібні пробіли.
При заміні mv на echo скрипт видає нормальний аутпут, з потрібною кількістю пробілів після бекслешу (випробовував також інші варіанти з лапками, теж добивався правильного аутпуту з ехом, але з мувом не працювало sad )
Зато при спробі вчинити переіменування отримую отаке:

mv: cannot stat `\\ 0178.jpg': No such file or directory

Звідкіля воно другого бекслеша бере? І взагалі, як правильно той символ через скрипт шеллу "згодувати"?

2

Re: rename file in bash

Привіт!

ls ttt* | while read i; do mv "$i" "${i##ttt}" ; done

прицює з файлами типу ttt.* а от блін як з пробілом хз, аж самому цікаво стало smile

3

Re: rename file in bash

Лапки з mv взагалі не потрібні.
А взагалі-то для таких операцій краще використовувати rename:

rename " " "" \ *.jpg

4

Re: rename file in bash

Да smile

ось зі мною ще поділилися, в програмуванні я ніякий smile це вже ради сміху, як можно було просто рішити проблему, і на скіки зробити складнішою smile

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyleft (c) 2008 GFORGX <gforgx@gmail.com>
import os
from shutil import move
for file in os.listdir(os.curdir):
  if file.startswith(' '):
    move(file, file[1:])

Востаннє редагувалося sevenfourk (2008-04-15 16:31:16)

5

Re: rename file in bash

diligent, дякую! rename добре спрацювало. Навіть скрипта не треба. Тільки довелося трохи в "перловий" синтаксис подивитись (regular expressions)..
sevenfourk, в пітоні я зовсім не петраю. Підозрював що то якось там можна зробити, але докопування до того явно затягнулося б.
Все ж таки цікаво чи можливо було ту задачу вирішити засобами bash-скрипту. Може хтось має якісь ідеї? (власне коли пробіл знаходиться в середині назви -- жодних проблем. Навіть кілька скриптів готових в мережі можна надибати. Але як пробіл на початку, тоді вже починаються складності... :-/ Принаймні для мене)

6

Re: rename file in bash

Нема за що.

for i in \ *.jpg; do mv "$i" $i; done

7

Re: rename file in bash

Клас! smile Все працює.. Якось і не здогадався що той аргумент можна в лапках подати а не мучитись з бекслешами.
Ще раз спасибі за поміч.