如何创建有效的连续完整文件路径?

时间:2017-06-23 06:06:04

标签: bash shell concatenation filenames filepath

如何为复制命令创建有效构造的完整文件路径? 我想构建一个有效的文件路径,它将被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

1 个答案:

答案 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到目标文件。