【发布时间】:2016-05-31 22:25:18
【问题描述】:
我需要删除从给定文件夹开始的所有文件名和文件夹名称中的正斜杠,包括其所有子文件夹。
为了在 Mac 上使用 automator,我在下面找到了 bash 脚本。它在尝试替换任何类型的字符时有效(例如使用 [A] 替换文件名中的 A),但不适用于正斜杠。
#!/bin/bash
find "/startdir/" -depth -name "*[\/]*" |
while read FILEDIR
do
DIR="${FILEDIR%/*}"
FILE="${FILEDIR/*\/}"
NEWFILE="${FILE//[\/]/_}"
mv "$DIR/$FILE" "$DIR/$NEWFILE"
done
非常欢迎任何帮助!
【问题讨论】:
-
为什么文件名应该包含正斜杠?无论如何,我已经在我的 bash 测试环境中执行了您的脚本,并且收到了以下消息:find:警告:Unix 文件名通常不包含斜杠(尽管路径名包含)。这意味着 '-name '[\\/]'' 在这个系统上可能会一直评估为 false。您可能会发现“-wholename”测试更有用,或者“-same file”可能更有用。或者,如果您使用 GNU grep,您可以使用 'find ... -print0 | grep -FzZ '[\\/]''.
-
@123 Mac OS != linux
-
@Groelk 在
mv前面放一个echo,看看它实际上在做什么(如果它甚至进入循环)。执行bash -x也可能有用。 -
@BroSlow 是的,我的错。
-
感谢您的建议。这意味着在 Mac 上处理整个硬盘驱动器的内容。我正在寻找一个脚本 - 任何脚本 - 可以递归处理文件夹、子文件夹和文件的所有名称以删除斜杠。不幸的是,OSX 在文件名和文件夹名中支持正斜杠字符。
标签: macos bash rename file-rename