Bash 递归查找文件并使用它们

Bash 递归查找文件并使用它们,bash,shell,sh,Bash,Shell,Sh,我正在寻找一个脚本,它比较来自两个不同路径的相同文件 脚本必须接受2个路径,即oldfiles和newfiles目录路径作为参数 从旧文件中读取第一个子文件夹名称,并在新文件路径中搜索相同的子文件夹名称。如果找到相同的子文件夹,则 检查,如果两个文件名都匹配(不是扩展名!),如果匹配,则 对这两个文件做些什么 请帮帮我! 到目前为止,他是我剧本中的主角 #处理目录_1中的每个文件,将其与目录_2进行比较 在读取src时查找$1/-type f-name'*.txt'-print | 做 用于*/

我正在寻找一个脚本,它比较来自两个不同路径的相同文件

  • 脚本必须接受2个路径,即oldfiles和newfiles目录路径作为参数
  • 从旧文件中读取第一个子文件夹名称,并在新文件路径中搜索相同的子文件夹名称。如果找到相同的子文件夹,则
  • 检查,如果两个文件名都匹配(不是扩展名!),如果匹配,则
  • 对这两个文件做些什么
  • 请帮帮我! 到目前为止,他是我剧本中的主角

    #处理目录_1中的每个文件,将其与目录_2进行比较
    在读取src时查找$1/-type f-name'*.txt'-print |
    做
    用于*/*.txt中的文件名;做
    echo$filename
    fn=$(basename“$filename”)
    如果[-f“$filename”];然后
    echo$filename
    newname=`echo$2/$fn | sed's/\.txt$//g'`
    echo$newname
    #用这两个文件在这里做些什么
    回音“完成”
    fi
    完成
    完成
    
    文件名不需要
    循环,
    find
    正在打印文件名

    使用
    basename
    是错误的,因为它会丢失路径中的所有中间目录。因此,使用bash变量替换将路径中的
    $1
    替换为
    $2

    find "$1" -type f -name '*.txt' -print | while read filename
    do
        echo "$filename"
        newname=${filename/$1/$2} # Replace old directory prefix with new prefix
        newname=${newname%.txt} # Remove extension
        echo "$newname"
        if [ -f "$newname" ]
        then
            #do something here with this two files
        fi
        echo "Done"
    done
    

    您可以使用
    $(basename“$filename.txt)
    同时获取文件名并删除后缀。另外:如果我有“两个//”是否可以/Users/test/Desktop/test2/folder1/test//file1.txt/Users/test/Desktop/test2/folder2/test//file1您在
    [
    之后漏掉了空格。您不需要
    find
    命令中的
    //code>,这是斜杠的两倍。可以,但不需要。