我有很多带有冒号的目录。
例如
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
即使目录名称包含换行符或其他恶作剧字节,也应该安全工作。