os x 从文件名中删除正斜杠

os x 从文件名中删除正斜杠

你好,我想从所有文件中删除所有正斜杠,但对主目录中的每个目录递归执行此操作。

我该如何修改这个非递归工作的脚本?

for f in "$1"/*; do
dir="$(dirname "$f")"
file="$(basename "$f")"
mv -- "$f" "${dir}/${file//[^_-0-9A-Za-z.]}"
done

或者更好的是,我只想替换文件名中的正斜杠,但这对于主文件夹中的每个子文件夹都适用?

问候 Max

答案1

在 BSD 层,正斜杠是路径分隔符。当您遇到带有正斜杠的文件名时,内核会将正斜杠转换/为冒号:。因此,Finder 应用程序中的文件名可能看起来像 ,foo/bar但在 BSD 层中它看起来像foo:bar

因此,要遍历目录树,请使用find来查找名称中包含 的文件:。然后,使用内联脚本从-execdir文件名中删除冒号(查找器应用程序中的正斜杠)。

find . -type f -name '*:*' -execdir bash -c ' for file
    do
        echo mv -- "${file}" "${file//:}"
    done' sh {} \;

这将仅列出mv命令和操作数。如果您认为输出将提供您想要的结果,则删除echo

相关内容