将所有带有冒号的目录更改为空格

将所有带有冒号的目录更改为空格

我有很多带有冒号的目录。

例如

Main_Dir:
-Di_name: Test1-1
--files
-Di_name: Test2-2
--files

我想删除(冒号):amd 将其替换为空格或直接将其删除。

我怎样才能实现这个目标?

我正在使用 Debian

答案1

假设 Bash、Ksh 或 Zsh 并且所有目录都位于同一级别:

# loop over the directories
for i in */; do
  # if they have a ':' semi-colon in their name
  # replace ':' using parameter expansion¹, (the space is already there)
  [[ "$i" = *:* ]] && mv -- "$i" "${i/:}"
done

^外壳参数扩展

答案2

非 POSIX 标准(因为-print0-d ''选项),但非常安全且防弹的方式:

cd /the/dir/containing/colon/dirnames
find . -maxdepth 1 -type d -name '*:*' -print0 | while read -r -d '' DIR ; do mv -- "$DIR" "$(echo "$DIR" | sed 's/://g')" ; done

即使目录名称包含换行符或其他恶作剧字节,也应该安全工作。

相关内容