我正在尝试替换与CentOS上特定模式*匹配的文件,但它不起作用。
我最初写道:
cp example.com/(*)/orm-mysql/build/conf/(*)-conf.live.php example_dev.com/$1/orm-mysql/build/conf/$1-conf.live.php我希望将example_dev.com目录中的文件替换为example.com中同名的文件。
*模式是example.com/,然后是任何东西,直到/orm-mysql/build/conf/,然后是一个以第一个通配符值作为前缀并以-conf.live.php结尾的文件。
我尝试将find与exec结合使用:
find /var/www/html/example.com -name '*/orm-mysql/build/conf/*-conf.live.php' -exec echo {} \;但它犯了一个错误:
查找:警告: Unix文件名通常不包含斜杠(尽管路径名有)。这意味着'-name‘*/orm-mysql/build/conf/*-con.live.php’可能会在这个系统上一直被计算为false。您可能会发现‘-整体性名称’测试更有用,或者可能'-samefile‘。或者,如果您正在使用grep,您可以使用'find . -print0 grep -FzZ‘*/orm/build/conf/*-con.live.php’。
我认为这是因为-name用于文件,而不是路径。
我怎样才能做到这一点,还有比编写shell脚本更简单的方法吗?
下面是一些例子:
/var/www/html/example.com/video/orm-mysql/build/conf/video-conf.live.php
/var/www/html/example.com/images/orm-mysql/build/conf/images-conf.live.php
/var/www/html/example.com/audio/orm-mysql/build/conf/audio-conf.live.php它们将取代:
/var/www/html/example_dev.com/video/orm-mysql/build/conf/video-conf.live.php
/var/www/html/example_dev.com/images/orm-mysql/build/conf/images-conf.live.php
/var/www/html/example_dev.com/audio/orm-mysql/build/conf/audio-conf.live.php发布于 2019-01-07 14:57:12
实际上,我会用shell循环来完成这个任务:
for dir in example.com/*; do
prefix=${dir##*/}
cp "$dir"/orm-mysql/build/conf/"$prefix"-conf.live.php \
example_dev.com/"$prefix"/orm-mysql/build/conf/$1-conf.live.php
done如果目标目录不存在,则会出现故障,但如果存在,则会按预期的方式工作。如果您想避免抱怨,请使用以下命令:
for dir in example.com/*; do
prefix=${dir##*/}
target=example_dev.com/"$prefix"/orm-mysql/build/conf/
if [ -d "$target" ]; then
cp "$dir"/orm-mysql/build/conf/"$prefix"-conf.live.php "$target"
fi
donehttps://unix.stackexchange.com/questions/493009
复制相似问题