如何为复制命令创建有效构造的完整文件路径? 我想构建一个有效的文件路径,它将被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 $4 }')
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 $4 }'
+ 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"
之间的空格按照建议消除,这是以下结果。
++ 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 $4 }'
+ 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
答案 0 :(得分:1)
看起来您想要做的事情可以简单地实现如下:
find "/path/sourcefolder" -name "*zipfolder*" -exec unzip -p {} '*12345678.xml' > "/path/Desktop/12345678.xml" \;
使用12345678.xml
的{{1}}标志将找到的邮箱中的任意位置/path/Desktop/12345678.xml
提取到unzip
,将文件内容打印到stdout并重定向stdout到目标文件。