如何使用每個檔案的內容為多個檔案新增副檔名?

如何使用每個檔案的內容為多個檔案新增副檔名?

我有超過 10,000 個沒有舊版 Mac 作業系統副檔名的檔案。它們極其嵌套在文件結構中,並且還具有各種奇怪的格式和字元。它們不再附加文件類型或創建者程式碼。許多此類文件的文件中都包含文本,可讓我確定擴展名(例如,Word.Document.8 位於該版本 Word 創建的每個文件的文本中)。

我發現一個腳本看起來可以一次適用於其中一種文件類型,但它會刪除惡意字元後的部分文件名,這不好。

find . -type f -not -name "*.*" -print0 |\
    xargs -0 file |\
    grep  'Word.Document.8' |\
    sed 's/:.*//' |\
    xargs -I % echo mv % %.doc

我應該首先清理文件名中的字符,還是以編程方式處理腳本中的字符以使它們保持不變?只要我不丟失文件名中的任何信息,我就不會發現清除斜杠和其他問題字符的問題。另外,如果我清理檔案名,可能會有重複項,因此任何清理腳本都必須在擴展名之前添加類似“-1”的內容,以確保不會丟失任何內容。

我與這個腳本無關,但它是可以理解的,這是一個專業人士。此檔案伺服器上安裝了 Mac OS X 10.6,但我可以存取任何最新版本的 OS X。

答案1

我仍然不能 100% 確定我理解這個問題,但這裡有一些想法。

  1. sed 's/:.*//'將破壞任何包含冒號的檔案名稱。冒號在 Mac 上是合法的檔案名稱嗎?如果沒有,那麼這對您來說不是問題。否則,考慮做sed 's/: Word.Document.8$//'或。sed 's/: [^:]*$//'
  2. mv產生的命令看起來xargs有問題。嘗試
    xargs -I % sh -c 'echo mv "%" "%.doc"'

答案2

第二個問題是如何更改腳本,以便它同時查找多個文件類型並為每個文件類型提供正確的擴展名?

以下是一些幫助您入門的提示:

sed -e '/Word\.Document\.8/s/某物/別的東西/;s/其他/完後還有/'\
    -e '/Excel\.Sheet\.8/s/東西2/其他的東西2/;s/另外2個/還有2 個/'\

或者

awk'
      /Word\.Document\.8/ {
            Word 的 awk 指令
      }
      /Excel\.Sheet\.8/ {
            Excel 的 awk 指令
      }
          
'

相關內容