Maximus_V писал(а): ↑17.09.2012 22:50
И раз тема живет, хочу добавить, что четыре года назад у меня не получилось загнать скрипт в одну строчку. А теперь - пожалуйста (вдруг кому пригодится еще через пять лет):
Код: Выделить всё
x=10001; for i in `ls`; do mv $i ${x:1}.jpg; (( x++ )); done
Можно исполнять прямо из командной строки bash
Ну раз тема живет.. Ваш скрипт не работает с пробелами точно также, как и предыдущий, предложенный
infra_hdc.
Код: Выделить всё
$ cat ../t.sh
#!/bin/bash
x=10001;
for i in `ls`; do
mv $i ${x:1}.jpg;
(( x++ ));
done
$ touch 'a b a.jpg' a.jpg
$ ll
total 0
-rw-r----- 1 sgf sgf 0 Sep 18 00:43 a b a.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:43 a.jpg
$ ../t.sh
mv: cannot stat `a': No such file or directory
mv: cannot stat `b': No such file or directory
mv: cannot stat `a.jpg': No such file or directory
$ ll
total 0
-rw-r----- 1 sgf sgf 0 Sep 18 00:43 0003.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:43 a b a.jpg
Обратите внимание, что файл a.jpg вместо номера 0002 получил 0003.
Или более хитрый вариант:
Код: Выделить всё
$ touch a.jpg b.jpg '*.jpg'
$ ll
total 0
-rw-r----- 1 sgf sgf 0 Sep 18 00:10 a.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:10 b.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:10 *.jpg
$ ../t.sh
mv: cannot stat `a.jpg': No such file or directory
mv: cannot stat `b.jpg': No such file or directory
mv: target `0005.jpg' is not a directory
$ ll
total 0
-rw-r----- 1 sgf sgf 0 Sep 18 00:10 0001.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:10 0002.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:10 *.jpg
и этот пример имеет весьма интересное продолжение. Запустим еще раз
Код: Выделить всё
$ ../t.sh
mv: `0001.jpg' and `0001.jpg' are the same file
mv: `0002.jpg' and `0002.jpg' are the same file
mv: target `0005.jpg' is not a directory
sgf@shilvana:.../tmp/t$ ll
total 0
-rw-r----- 1 sgf sgf 0 Sep 18 00:17 0003.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:17 0004.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:17 *.jpg
Видите? Номера сдвинулись вверх.
Придумать можно и более реалистичные варианты, но есть ли смысл? Даже этих примеров достачно, чтобы сказать, что последствия запуска скрипта на чем-то, кроме букв и, возможно, цифр, непредсказуемы.
Upd. Вообще, сдвиг номеров можно получить значительно проще:
Код: Выделить всё
$ touch 0001.jpg '*.jpg'
$ ll
total 0
-rw-r----- 1 sgf sgf 0 Sep 18 00:51 0001.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:51 *.jpg
$ ../t.sh
mv: `0001.jpg' and `0001.jpg' are the same file
mv: target `0003.jpg' is not a directory
$ ll
total 0
-rw-r----- 1 sgf sgf 0 Sep 18 00:51 0002.jpg
-rw-r----- 1 sgf sgf 0 Sep 18 00:51 *.jpg
Файд 0001 был переименован в 0002.