我有一个文件abc.123.234.345
,我想使用UNIX oneliner将123.234.345
的值存储到variable1中。
然后我必须将名为def
的文件重命名为def.123.234.345
我尝试了sed
,awk
但无法生成拆分字符串。
我必须搜索为abc.*.*.*
,因为字符串每次都会有所不同。
有什么建议吗?
我使用但未使用的一些示例
FILE=abc.*.*.* | mv /loc/def /loc/def.${FILE#*.}
答案 0 :(得分:2)
对于最新评论中修订的问题,其中只有一个文件与glob abc.*.*.*
匹配且该文件位于当前目录中:
find . -maxdepth 1 -name 'abc.*.*.*' -exec bash -c 'mv /loc/def "/loc/def.${1#./*.}"' none {} \;
或者,分两步:
file=$(echo abc.*.*.*)
mv /loc/def "/loc/def.${file#./*.}"
请注意,最佳做法是使用较低或混合大小写的shell变量的名称。系统为其变量使用大写名称,您不希望意外覆盖其中一个。
这就是你所要求的:
find . -name 'abc.*.*.*' -exec bash -c 'mv /loc/def "/loc/def.${1#./*.}"' none {} \;
以上执行mv
命令,例如:
mv /loc/def /loc/def.123.234.345
请注意,在第一个mv
命令之后,/loc/def
将不再存在,因此第二个mv
命令将失败。