在 Mac 上使用查找命令,处理文件名中的空格和 (
Using find command on Mac, handling spaces and ( in filenames
我正在将大量 Mac 数据从用户传输到 Windows machine 并试图删除所有非法 windows 字符。我使用了另一个 post 的以下内容,但这不处理空格或 ( 在 mac 数据上。
find . -name "*[<>:\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\|?*]\+/- /g" <<< "$x") && mv "$x" "$y" ' \;
所以我在括号的意外标记 `(' 附近出现语法错误
并且对于那些带有空格的文件或目录没有这样的文件或目录。
试试这个应该适用于任何字符序列的替代方法:
find . -name "*[<>:\|?*]*" |
sed "p; s/[<>:\|?*]\+/- /g" |
while read x; read y
do mv "$x" "$y"
done
@meuh does not work with OSX because it relies upon a non-POSIX regular expression. Probably it was written for GNU sed 的建议答案,在很多方面都与标准不同。
BREs (used by sed) 不接受此表达式中的 +
。相反,使用范围后跟范围的零个或多个副本 (*
)。
这是一个工作脚本:
#!/bin/sh
find . -name "*[<>:\|?*]*" 2>/dev/null |
sed "p; s/[<>:\|?*][<>:\|?*]*/- /g" |
while read x; read y
do
if test "X$x" != "X$y"
then
mv -v "$x" "$y"
fi
done
和输出(从名为 ".baf fled/f<>foo2."
的文件开始):
./baf fled/f<>oo2. -> ./baf fled/f- oo2.
我正在将大量 Mac 数据从用户传输到 Windows machine 并试图删除所有非法 windows 字符。我使用了另一个 post 的以下内容,但这不处理空格或 ( 在 mac 数据上。
find . -name "*[<>:\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\|?*]\+/- /g" <<< "$x") && mv "$x" "$y" ' \;
所以我在括号的意外标记 `(' 附近出现语法错误
并且对于那些带有空格的文件或目录没有这样的文件或目录。
试试这个应该适用于任何字符序列的替代方法:
find . -name "*[<>:\|?*]*" |
sed "p; s/[<>:\|?*]\+/- /g" |
while read x; read y
do mv "$x" "$y"
done
@meuh does not work with OSX because it relies upon a non-POSIX regular expression. Probably it was written for GNU sed 的建议答案,在很多方面都与标准不同。
BREs (used by sed) 不接受此表达式中的 +
。相反,使用范围后跟范围的零个或多个副本 (*
)。
这是一个工作脚本:
#!/bin/sh
find . -name "*[<>:\|?*]*" 2>/dev/null |
sed "p; s/[<>:\|?*][<>:\|?*]*/- /g" |
while read x; read y
do
if test "X$x" != "X$y"
then
mv -v "$x" "$y"
fi
done
和输出(从名为 ".baf fled/f<>foo2."
的文件开始):
./baf fled/f<>oo2. -> ./baf fled/f- oo2.