如何制作有效的串联完整文件路径?

How can I make a valid concatenated full file path?

如何为复制命令创建有效的完整文件路径? 我想构建一个有效的文件路径,它将被 cp 命令读取为路径,我丢失的文件所在的路径,并将被复制到另一个目录。问题是 cp 命令不将其识别为路径。我希望并感谢你能帮助我解决这个问题。

*文件和目录存在。

*完整的文件路径由 $fname$path 连接而成。

*我丢失的文件名为12345678.xml

脚本

 17   for((i=0;i<${#array[@]}-1;i+=2));do
 18     path=$(find "/path/sourcefolder" -name "*zipfolder*" -exec grep -l "Mylostfile" {} + )
 19     fname=$(find "/path/sourcefolder" -name "*zipfolder*" -exec unzip -l {} \; | grep "12345678.xml" | awk ' { printf  }')
 20     fullpath="$path/$fname"
 21     cp -t "/path/Desktop" "$fullpath"
 22    done

实际产量

Test_v2.sh: line 20: /path/zipfolder/12345678.xml: No such file or directory cp: cannot stat '': No such file or directory

期望输出

将文件复制到另一个目录

附加评论#1: 我添加了 set -xv,这是结果。

++ find /path/sourcefolder -name '*zipfolder*' -exec grep -l 12345678 '{}' +
+ path=/path/sourcefolder/zipfolder.zip
++ find /path/sourcefolder -name '*zipfolder*' -exec unzip -l '{}' ';'
++ grep 12345678
++ awk ' { printf  }'
+ fname=12345678.xml
+ set -xv
+ fullpath=
+ /path/sourcefolder/zipfolder.zip/12345678.xml
Test_v2.sh: line 21: /path/sourcefolder/zipfolder.zip/12345678.xml: No such file or directory
+ cp -t /path/Desktop ''
+ cp: cannot stat '': Not a directory

附加评论#2: fullpath="$path/$fname" 之间的 space 按建议删除,结果如下。

++ find /path/sourcefolder -name '*zipfolder*' -exec grep -l 12345678 '{}' +
+ path=/path/sourcefolder/zipfolder.zip
++ find /path/sourcefolder -name '*zipfolder*' -exec unzip -l '{}' ';'
++ grep 12345678
++ awk ' { printf  }'
+ fname=12345678.xml
+ set -xv
+ fullpath=/path/sourcefolder/zipfolder.zip/12345678.xml
+ cp -t /path/Desktop ''
+ cp: cannot stat '/path/sourcefolder/zipfolder.zip/12345678.xml': Not a directory

看起来你想做的事情可以简单地实现如下:

find "/path/sourcefolder" -name "*zipfolder*" -exec unzip -p {} '*12345678.xml' > "/path/Desktop/12345678.xml" \;

它通过使用 unzip-p 标志将文件内容从找到的 zip 中的任何位置提取到 /path/Desktop/12345678.xml 并将文件内容打印到标准输出并将标准输出重定向到目标文件。