2013-06-29 199 views
1

我想改变一些文件名与此类似完整路径:shell脚本:如何替换文件名

/home/guest/test/home/guest/.test.log

我想下面的命令,但它不能搜索“/”

string="/home/guest/test" 
substring="/" 
replacement="/." 

echo ${string/%substring/replacement}.log 
+0

find/opt -type f -exec echo {} \; | sed's/\/\([^ \ /] * \)$/\ /。\ 1.lock /' – jnstar

+0

for i in/home/guest /做P ='dirname $ i'; F ='basename $ i'; echo $ P“/."$ F”.lock“;完成 – jnstar

+0

查找。 | sed“s/\(。* \)\/\(。* \)/ \ 1 \ /。\ 2.lock /” – jnstar

回答

0

使用在Mac上的bash,所以它可能与任何外壳使用的是工作...创建

string="/home/guest/test" 
echo $string | sed 's/\/\([^\/]\{0,\}\)$/\/.\1.log/' 

使用简单的shell字符串替换不会起作用,因为我知道您无法将最后一次出现的/ sign作为唯一替代方法。

更新: 其实我来想的另一种方式,如果你知道它始终是“/二/目录/在”

string="/home/guest/test" 
firstpartofstring=$(echo $string | cut -d\/ -f1-3) 
lastpartofstring=$(echo $string | cut -d\/ -f4) 
echo ${firstpartofstring}/.${lastpartofstring}.log 
0

你可以这样做:

for file in /home/guest/*; do 
    name=${file##*/} 
    path=${file%/*} 
    mv "$file" "$path"'/.'"$name"'.log' 
done