
我有超過 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% 確定我理解這個問題,但這裡有一些想法。
sed 's/:.*//'
將破壞任何包含冒號的檔案名稱。冒號在 Mac 上是合法的檔案名稱嗎?如果沒有,那麼這對您來說不是問題。否則,考慮做sed 's/: Word.Document.8$//'
或。sed 's/: [^:]*$//'
。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 指令 } ⋮ '