2016-03-03 24 views
1

我試圖建立一個shell命令(在Mac OSX El Capitan上)遞歸地重命名我所有的DOCX文件來擴展ZZZZ,然後立即重命名他們再次回到DOCX擴展。這是一個解決方法,希望能夠解決問題,如下所示:shell命令(在Mac OSX El Capitan上)遞歸地重命名我所有的DOCX文件

我這樣做是爲了避免Mac Spotlight錯誤,它無法正確搜索Mac Word 2011文件內的內容。它給出了間歇性的結果,並且似乎錯過了很多點擊(這個問題似乎在蘋果Mac論壇上被稱爲幾年)。重命名文件似乎可以啓動Spotlight。

Mac Shell沒有BASH Rename命令,所以我試圖反覆使用「MV」命令。我已經有部分成功用下面的代碼,但不知道如何配合它一起...

cd ~/Documents/TESTING/ 

# FINDS MY DOCX'S RECURSIVELY IN TOP-LEVEL FOLDER AND IT'S SUBFOLDERS. NOT SURE OF SYNTAX TO USE FOR "MV" COMMAND TO RENAME DOCX FILES 
# find . -wholename '*.docx' -type f -exec mv UNSURE1HERE UNSURE2HERE \; 

# WORKS BUT ONLY IN TOP-LEVEL FOLDER - I NEED IT TO WORK RECURSIVELY ON DOCX'S IN TOP-LEVEL FOLDER AND IT'S SUBFOLDERS: 
# for files in *.docx; do mv "$files" "${files%.docx}.zzzz"; done 
+1

只需更改文件的修改時間就可以重新編制索引?在每個文件上使用「touch」要比試圖重命名兩次要簡單得多:find。 -wholename'* .docx'-type f -exec touch {} +' – chepner

+0

不確定這是對Apple/Microsoft Spotlight錯誤的可靠修復。我也想保留時間和日期元數據。我沒有看到重命名擴展名「兩次」的缺點。速度不是一個大問題。謝謝。 – s2016

+0

「Mac Shell沒有BASH重命名命令」:OS X上的默認shell一直是bash。重命名* nix文件一直使用'mv'完成。另外,你可能想看看'mdutil'命令。 – miken32

回答

1

你可以做到這一點使用process substitution

#!/bin/bash 

cd ~/Documents/TESTING/ 

while IFS= read -r -d '' file; do 
    echo mv -- "$file" "${file%.*}.zzzzz" 
done < <(find . -iname '*.docx' -type f -print0) 

如果您滿意然後在輸出之前mv

echo除去從.zzzz.docx

while IFS= read -r -d '' file; do 
    echo mv -- "$file" "${file%.*}.docx" 
done < <(find . -iname '*.zzzz' -type f -print0) 
+0

它提供了這個錯誤信息:意外的EOF,同時尋找匹配的'「' – s2016

+0

謝謝 - 它主要是工作2問題:1)如何找到」docx「字符串,無論大小寫2)如何從zzzz重新命名爲docx。我試着#2下面的代碼,而不是工作 – s2016

+0

#/斌/慶典 CD〜/文檔/測試/ 而IFS =讀-r -d'文件。!做 MV - 「$文件」 「$ {file%.docx} .zzzzz」 mv - 「$ file」「$ {file%.zzzzz} .docx」 done < s2016

相關問題