2017-06-23 70 views
0

如何爲複製命令創建一個有效的完整文件路徑? 我想構建一個有效的文件路徑,它將通過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: 我增加了設置-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

我不認爲錯誤信息來自您顯示的* cp *行,因爲消息抱怨了一個空參數,但* fullpath *必須通過構造包含至少一個斜槓。另外,你忘了告訴我們哪一行是第20行。我建議用'-x'運行腳本。順便說一句,根據* cp *的手冊頁,正確的語法是'cp -t/path/Desktop「$ fullpath」'。但是,我不認爲這是錯誤的原因。至少我的* cp *對於最終獲得-t也很滿意。 – user1934428

+1

嘗試在提到的行之前放置set -xv並準確查看正在設置和返回的內容。 – grail

+0

@ user1924428更新!我添加了set -xv作爲grail建議和它的結果並且改變了cp語法,如user1924428也建議。在'fullpath ='$ path/$ fname「'中有 –

回答

1

它看起來像你想要做如下可以簡單地實現什麼:

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

它通過使用unzip-p標誌,以避免在發現zip包/path/Desktop/12345678.xml隨時隨地提取文件12345678.xml將文件的內容打印到stdout並將stdout重定向到目標文件。

+0

好吧,哇。你釘了它!它將內容複製到xml到我想要的位置。豎起大拇指。非常感謝你Aaron! –

+0

@JafetSoto不客氣!我不知道'unzip'接受通配符作爲文件選擇器,直到我試圖回答你的問題,這是一個很好的發現:) – Aaron

+0

雖然真的很有趣的發現,這幫助我很多,因爲我幾乎放棄尋找解決方案,但你和其他幫助我的人,讓這個世界變得更美好。 –