Regular-Expression

如何將文件名的x個字元與cp匹配?

  • March 26, 2020

我嘗試使用cp部分動態名稱複製文件:

cp google71bg2z2850dafxa3.html DESTIONATION

原則上,google文件名的部分是一致的,但是文件名的71bg2z2850dafxa3(16個字元)部分是動態的,我不想在任何腳本中手動更改它,如果我不需要,所以我想關於使用正則表達式。

man cp我沒有找到關於“正則表達式”或“正則表達式”的任何數據。

另外,我嘗試cp x{2} DESTINATION了一個名為 的文件x12,但失敗了。

如何將文件名的x個字元與cp匹配?

那就是問;如何將 16 個字元與一些正則表達式匹配?

這可能是一種簡化,但如果您感興趣的所有文件都在一個目錄中,並且如果這些文件的名稱中沒有空格,您可以執行以下操作:

#!/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

這裡的正則表達式和我之前的例子一樣。

引用自:https://unix.stackexchange.com/questions/575014