答案1
for name in *\[*\]\ -\ *; do
if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then
mv "$name" "${name#* - }"
fi
done
上面的循环可以工作,bash
或者ksh93
至少可以遍历当前目录中与文件名通配模式匹配的所有名称*\[*\]\ -\ *
(括号和空格需要从 shell 中转义),并进行测试以确保它是一个目录并且修改后的目录是可用的。名称尚不存在。如果一切正常,则会重命名该目录。
参数扩展${name#* - }
将获取变量的值name
,并删除从变量开头到第一次出现␣-␣
(空格-破折号-空格)的所有内容。
答案2
您可以rename
为此使用:
rename 's/.* ([^ ]*)$/$1/' *
它将删除目录中每个文件名中的每个字符,直到最后一个空格。
答案3
find and rename 是一个强大的团队。使用该-0
选项,所有可能的文件名都会被干净地处理:
find -maxdepth 1 -type d -print0 | xargs -0 rename s/.*Directory-/Directory-/