将文件路径转换为字符串

Raf*_*ael 1 bash shell

我试图找到一种方法用另一个字符串替换目录路径中的字符串时遇到错误

sed: Error tryning to read from {directory_path}: It's a directory 
Run Code Online (Sandbox Code Playgroud)

shell脚本

#!/bin/sh

R2K_SOURCE="source/"
R2K_PROCESSED="processed/"
R2K_TEMP_DIR=""

echo " Procesando archivos desde $R2K_SOURCE "

for file in $(find $R2K_SOURCE )
do
        if [ -d $file ]
        then
                R2K_TEMP_DIR=$( sed 's/"$R2K_SOURCE"/"$R2K_PROCESSED"/g' $file )
                echo "directorio $R2K_TEMP_DIR"
        else
#               some code executes
                :
        fi
done

# find $R2K_PROCCESED -type f -size -200c -delete
Run Code Online (Sandbox Code Playgroud)

我理解这条线上的恐怖

R2K_TEMP_DIR=$( sed 's/"$R2K_SOURCE"/"$R2K_PROCESSED"/g' $file )
Run Code Online (Sandbox Code Playgroud)

但我不知道如何告诉sh将$ file变量视为字符串而不是目录对象.

loe*_*tar 8

如果你想要替换路径名的一部分,你可以回显路径名并将其带到sed over pipe.此外,您必须通过将sed命令放入双引号而不是单引号来启用globbing,并为's'命令更改分隔符,如下所示:

R2K_TEMP_DIR=$(echo "$file" | sed "s:$R2K_SOURCE:$R2K_PROCESSED:g")
Run Code Online (Sandbox Code Playgroud)

然后你就可以在's'命令中使用斜杠操作了.

更新:

更好的是删除无用的回声并使用"here is string"代替:

R2K_TEMP_DIR=$(sed "s:$R2K_SOURCE:$R2K_PROCESSED:g" <<< "$file")
Run Code Online (Sandbox Code Playgroud)