【问题标题】:Shell command (on Mac OSX El Capitan) to recursively rename all my DOCX filesShell 命令(在 Mac OSX El Capitan 上)以递归方式重命名我的所有 DOCX 文件
【发布时间】:2016-03-03 17:02:55
【问题描述】:

我正在尝试构建一个 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

【问题讨论】:

  • 简单地改变文件的修改时间会导致它被重新索引吗?在每个文件上使用touch 比尝试重命名它们两次要简单得多:find . -wholename '*.docx' -type f -exec touch {} +
  • 不确定它是否能可靠地修复 Apple/Microsoft 的 Spotlight 错误。我还想保留时间和日期元数据。我认为将扩展名“两次”重命名没有不利之处。速度不是大问题。谢谢。
  • “Mac Shell 没有 BASH 重命名命令”:OS X 上的默认 shell 一直是 bash。在 *nix 上重命名文件始终使用 mv。另外,您可能想查看mdutil 命令。

标签: macos bash shell terminal


【解决方案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)

【讨论】:

  • 它给出了这个错误信息:在寻找匹配的 `"' 时出现意外 EOF
  • 谢谢 - 它主要工作。 2个问题:1)如何找到“docx”字符串而不管大小写。 2) 如何从 zzzz 重命名为 docx。我用下面的代码尝试了#2,但没有工作。
  • #!/bin/bash cd ~/Documents/TESTING/ 而 IFS= 读取 -r -d '' 文件; do mv -- "$file" "${file%.docx}.zzzzz" mv -- "$file" "${file%.zzzzz}.docx" done
  • 当它看到 testing99.DOCX(大写 ext)时,它会导致 testing99.DOCX.zzzzz 而不是替换 DOCX
  • 完美运行。谢谢。
猜你喜欢
  • 2013-05-31
  • 2013-10-03
  • 1970-01-01
  • 2017-01-28
  • 2016-02-20
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多