我想将它添加到Automator中,让用户选择运行它的目录。 One Drive不会上传带空格的文件。我设法删除所有空格但不删除开头和结尾的所有空格。
我的代码:
for f in "$1"/*; do
dir=$(dirname "$f")
file=$(basename "$f")
mv "$f" "${dir}/${file//[^0-9A-Za-z.]}"
done
答案 0 :(得分:2)
#!/usr/bin/env bash
shopt -s extglob # Enable extended globbing syntax
for path in "$1"/*; do
file=${path##*/} # Trim directory name
file=${file##+([[:space:]])} # Trim leading spaces
file=${file%%+([[:space:]])} # Trim trailing spaces
if [[ $file != "${path##*/}" ]]; then # Skip files that aren't changed
mv -- "$path" "$1/${file}"
fi
done
注意:
bash
启动shell,而不是sh
,以确保扩展(例如extglobbing和[[ ]]
)可用。dirname
,因为我们始终知道目录名称:它位于$1
。extglob
语法扩展了常规的glob表达式,使其具有与正则表达式相当的能力。 +([[:space:]])
是“一个或多个空格”的extglob,而${var%%pattern}
和${var##pattern}
分别从后面或前面删除尽可能多的匹配pattern
的字符变量的值。mv
是没有意义的,所以我们可以通过先检查来优化一点。