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