У меня есть несколько файлов, таких как (в Mac OS X):
product-103-footer.tpl
product-103-header.tpl
product-103.tpl
Я хочу заменить «103» во всех именах файлов чем-то другим, используя grep и sed, или что-то подобное.
Как мне это сделать?
Вот некоторая псевдо-командная строка того, чего я хочу достичь
find . /[103] | grep 103 | sed s/103/104/
Надеюсь, что это имеет смысл!
РЕДАКТИРОВАТЬ:
Все ближе:
find . -name 'product-103*' -print | sed 's/103/104/g'
macos
mac
command-line
unix
josef.van.niekerk
источник
источник
Ответы:
Ты можешь использовать
find
«sexec
возможность (рекурсивно) перебрать все файлы, а затем использовать простые замены строк:Удалить
echo
когда вы уверены, что это делает то, что вы хотите.В основном, что
exec
делает это заменить имя файла каждого файла, найденного в{}
, который передается в качестве аргументаsh -c
, Этот аргумент доступен как$0
Таким образом, имя файла. Мы используем это$0
аргумент вmv
вызов, где вторым аргументом является новое имя файла. Здесь 103 заменяется на 104. Обратите внимание, что двойные кавычки необходимы для правильной обработки пробелов в именах файлов.Увидеть Манипуляция строк в Bash Scripting Guide.
С зш
zmv
(на OS X через/bin/zsh
):Удалить
-n
вариант, когда это делает то, что вам нужно.источник
Perl лучше для этого.
Следующий кусок кода
в конечном итоге будет расширен до
<>
оператор получит каждое имя файла с символом '\ n' в конце и сохранит его в $ _, затемchomp
отрубит '\ n'. Тогда переменная$new
получает старое имя файла от$_
и заменить 103 на 104. Наконец,rename
просто переименуйте файл в его новое имя. Для получения более подробной информации о ключе -n -l -e, обратитесь к PerlRun часть perldoc.источник
источник