Shell命令(在Mac OSX El Capitan上)以递归方式重命名我的所有DOCX文件

时间:2016-03-03 17:02:55

标签: macos bash shell terminal

我正在尝试构建一个shell命令(在Mac OSX El Capitan上)以递归方式重命名我的所有DOCX文件以使其具有扩展名ZZZZ,然后立即将它们重新命名为DOCX扩展名。这是一个解决方法,希望如下修复问题:

我这样做是为了试图解决Mac Spotlight错误,该错误无法正确搜索Mac Word 2011文件中的内容。它给出了间歇性的结果,似乎错过了很多点击(这个问题似乎在Apple 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 个答案:

答案 0 :(得分: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)

如果您对输出感到满意,请在echo

之前删除mv

.zzzz.docx

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