Переименование нескольких файлов с помощью awk
Чтобы заменить пробелы на символы_подчёркивания с помощью awk, немножко поэкспериментировав, я нашёл следующий способ:
$ ls -1 | awk '{ newfn = $0; if(gsub(" ", "_", newfn)>0) { system("mv \"" $0 "\" " newfn) } }'
Рассмотрим эту команду подробнее. Команда
$ ls -1
перечисляет файлы текущей папки в виде одна строка - один файл. Поскольку awk обрабатывает поток ввода построчно, то это то, что нужно в данном случае.
Полученный поток я направляю на вход awk, а в качестве программы использую следующий алгоритм:
{
// переменная newfn будет хранить новое имя файла
newfn = $0;
// пробелы заменяются на символы_подчёркивания
n = gsub(" ", "_", newfn);
// если подобная замена была проведена, то...
if(n > 0)
{
// выполнить для этого файла переименование
// старое имя файла при этом берётся в кавычки
system("mv \"" $0 "\" " newfn);
}
}
В общем, довольно простое решение.