我正在尝试使用bash替换目录名称及其子目录中所有的点,并使用空格。
示例:目录dir.1.3将变为dir 1 3
到目前为止,我的脚本是:
#!/bin/bash
for dir in *\ -\ *; do
[[ -d "$dir" ]] || continue # skip if not a directory
sub="${dir#* - }"
if [[ ! -e "$sub" ]]; then
mv "$dir" "$sub"
mv echo "$(echo "Result: ${dir%.*}" | sed 's/\./ /g').${dir##*.}"
fi
done
使用find
:
find . -mindepth 1 -type d -name "*.*" -exec bash -c '
for ((i=$#;i>0;i--)); do
dir=${!i}
newdir=$(dirname "$dir")/$(basename "$dir" | tr -s "." " ")
if [ -e "$newdir" ]; then
echo "skipping \"$dir\", \"$newdir\" already exists" >&2
else
mv "$dir" "$newdir"
fi
done
' bash {} +
这*.*
将在当前目录中使用pattern递归查找所有目录名称,并使用跳过当前目录-mindepth 1
。找到的目录列表与-exec
bash脚本一起传递,在bash脚本中,其参数在for循环中以相反的顺序进行处理(具有更深层次的子目录排在最前面)。
新目录名称是通过dirname
和创建的basename
。后者被修改tr
为用一个空格字符-s
替换多个点(如果要用多个空格替换多个点,则删除选项)。如果新目录名称已经存在,请打印一条错误消息或将其移动。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句