我有一个文件 abc.123.234.345
,我想使用 UNIX oneliner 将 123.234.345
的值存储到变量 1 中。
然后我必须将名为 def
的文件重命名为 def.123.234.345
我尝试了 sed
、awk
但无法生成分割字符串。
我必须搜索abc.*.*.*
,因为字符串每次都会不同。
有什么建议吗?
一些我使用但不起作用的示例
FILE=abc.*.*.* | mv /loc/def /loc/def.${FILE#*.}
最佳答案
修改问题的答案
对于最新评论中修订的问题,该问题只有一个与 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
命令将失败。
关于regex - 用点分隔符分割 UNIX 字符串并存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712401/