![如何将文件名的x个字符与cp匹配?](https://linux22.com/image/169793/%E5%A6%82%E4%BD%95%E5%B0%86%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84x%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%8Ecp%E5%8C%B9%E9%85%8D%EF%BC%9F.png)
我尝试使用cp
复制具有部分动态名称的文件:
cp google71bg2z2850dafxa3.html DESTIONATION
原则上,google
文件名的部分是一致的,但是71bg2z2850dafxa3
文件名的(16个字符)部分是动态的,如果不需要的话,我不想在任何脚本中手动更改它,所以我想关于使用正则表达式。
在man cp
我没有找到任何有关“正则表达式”或“正则表达式”的数据。
另外,我尝试了cp x{2} DESTINATION
一个名为 的文件x12
,但失败了。
如何将文件名的x个字符与cp匹配?
那就是问;我怎样才能将 16 个字符与一些正则表达式匹配?
答案1
这可能是一种简化,但如果您感兴趣的所有文件都在一个目录中,并且这些文件的名称中都没有空格,您可以执行以下操作:
#!/bin/bash
destination="/wherever"
for i in *; do
if echo "${i}" | grep -q -E '^google.{16}\.html$'; then
cp "${i}" "${destination}"
fi
done
这里我使用grep
正则表达式匹配:^
以 开头 ( )的文件名google
,后跟任何 16 个字符 ( .{16}
),最后跟名称.html
末尾 ( )。$
Bash 也支持正则表达式匹配,所以你也可以这样做:
#!/bin/bash
destination="/wherever"
for i in *; do
if [[ "${i}" =~ ^google.{16}\.html$ ]]; then
cp "${i}" "${destination}"
fi
done
这里的正则表达式与我之前的示例相同。