如何将文件名的x个字符与cp匹配?

如何将文件名的x个字符与cp匹配?

我尝试使用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

这里的正则表达式与我之前的示例相同。

相关内容