我尝试将space
替换为目录名称中的-
,而不是macOS上的文件名称。我有以下内容:
cd ~/foo
for directory in **; do
if [[ -d $directory ]] && [[ -w $directory ]]; then
sed -i '' 's/ /-/g' "$directory"
fi
done
但我收到错误in-place editing only works for regular files
。
如何替换目录名称中的空格?
答案 0 :(得分:3)
sed
用于搜索和替换文件,而不用于Linux / Unix中的目录。 -i
中的sed
标志用于在文件上即时替换文本,该操作对目录没有意义。您可能想要在文件名上使用sed
更改目录的名称,并最终使用mv
重命名具有替换字符串的实际目录。
但您可以首先使用mv
使用shell原生功能将-
字符替换为空格。
for directory in **; do
if [[ -d $directory ]] && [[ -w $directory ]]; then
mv -- "$directory" "${directory// /-}"
fi
done
答案 1 :(得分:0)
要重命名目录,必须使用命令mv
#!/bin/bash
cd foo
for directory in **; do
if [[ -d $directory ]] && [[ -w $directory ]]; then
newdir=`echo "$directory" |sed 's/ /-/g' `
if [ "$directory" -ne "$newdir" ]
mv -- "$directory" "$newdir"
fi
fi
done
答案 2 :(得分:-1)
directory=`echo $directory | sed 's/ /-/g'`
答案 3 :(得分:-1)
sed
功能多样,但我建议您使用更专业的工具,例如rename
:
rename 's/ /-/g' "$directory"
此外,您很可能尝试重命名已重命名的目录(因此不再存在)。我建议你使用find
选项-depth
(深度优先)和-execdir
(在目录中执行命令,以避免影响父目录):
find foo -depth -type d -execdir rename 's/ /-/g' {} +