jos*_*erk 2 mac unix command-line macos
我有几个这样的文件(在 Mac OS X 上):
product-103-footer.tpl
product-103-header.tpl
product-103.tpl
Run Code Online (Sandbox Code Playgroud)
我想使用 grep 和 sed 或类似的东西将所有文件名中的“103”替换为其他内容。
我该怎么做?
这是我想要实现的一些伪命令行
find . /[103] | grep 103 | sed s/103/104/
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的!
编辑:
越来越近:
find . -name 'product-103*' -print | sed 's/103/104/g'
Run Code Online (Sandbox Code Playgroud)
您可以使用find
'sexec
选项(递归地)遍历所有文件,然后使用简单的字符串替换:
find . -type f -name "product-103*" \
-exec sh -c 'echo mv "$0" "${0/103/104}"' '{}' \;
Run Code Online (Sandbox Code Playgroud)
echo
当您确定这符合您的要求时,请删除它。
基本上,什么exec
是替换在 中找到的每个文件的文件名{}
,它作为参数传递给sh -c
. 此参数可用作$0
,因此是文件名。我们$0
在mv
调用中使用此参数,其中第二个参数是新文件名。此处,103 替换为 104。请注意,需要双引号才能正确处理文件名中的空格。
请参阅Bash 脚本指南中的字符串操作。
使用 zsh zmv
(在 OS X 上/bin/zsh
):
autoload -U zmv
zmv -Wn '*103*' '*104*'
Run Code Online (Sandbox Code Playgroud)
-n
当这满足您的需要时,请删除该选项。