我想用类似于这样的完整路径更改一些文件名:
/home/guest/test
⟶/home/guest/.test.log
我尝试了下面的命令,但它无法搜索“/”
string="/home/guest/test"
substring="/"
replacement="/."
echo ${string/%substring/replacement}.log
您可以执行以下操作:
for file in /home/guest/*; do
name=${file##*/}
path=${file%/*}
mv "$file" "$path"'/.'"$name"'.log'
done
在 Mac 上使用 bash 创建,因此它可以与您使用的任何 shell 一起使用...
string="/home/guest/test"
echo $string | sed 's/\/\([^\/]\{0,\}\)$/\/.\1.log/'
使用简单的 shell 字符串替换是行不通的,因为我不知道你可以将最后一次出现的 / 符号作为唯一的替换。
更新: 实际上,如果您知道它总是“/two/directories/in”,我会想到另一种方法
string="/home/guest/test"
firstpartofstring=$(echo $string | cut -d\/ -f1-3)
lastpartofstring=$(echo $string | cut -d\/ -f4)
echo ${firstpartofstring}/.${lastpartofstring}.log