Как переименовать несколько папок / файлов по определению пользователя.

Скажи за Ex. У меня есть несколько папок, таких как криш, moorthy, рави, роберт, и т.д ..

Я хочу переименовать все эти каталоги как script_1, script_2, script_3 и т.д.

Я попробовал ниже скрипт, но он не выдает вывод

потому что я в * do mv $ * $ script _ '$ i' готово

при выполнении он говорит, что не может двигаться, не может *

Пожалуйста, помогите мне пройти через это.

2 ответа2

1

В вашем сценарии так много неправильных вещей, что трудно понять, с чего начать.

Во-первых, синтаксис нуждается в маркерах конца строки:

for i in *; do mv $* $script_'$i'; done

Теперь параметр mv 1 должен быть именем текущего файла:

for i in *; do mv $i $script_'$i'; done

Затем в параметре mv 2 есть три ошибки ($script_ раскрывает несуществующую переменную script_ ; кавычки в '$i' делают его литералом; и вам нужна вторая переменная со счетчиком в ней для расширения до нужного имени) так что вам нужно что-то вроде:

n=1; for i in *; do mv $i script_$n; ((++n)); done

Это будет работать при условии отсутствия пробелов в именах файлов и при условии, что в текущем каталоге нет файлов, не являющихся каталогами. Итак, наконец, мы приходим к:

n=1; for i in *; do if [ -d "$i" ]; then mv "$i" script_$n; ((++n)); fi; done
0

perl-rename хорошо подходит для этого:

$ cd -- "$(mktemp --directory)"
$ mkdir foo bar baz
$ perl-rename --dry-run --verbose 's/.*/sprintf "script_%04d", ++$main::Mad/e' ./*/
./bar/ -> script_0001
./baz/ -> script_0002
./foo/ -> script_0003

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .