2015-09-28 47 views
0

我過的所有文件試圖環路目錄和對於目錄

  1. 將其移動到工作空間(我需要做這做,因爲工作區沒有環路的文件有很多存儲空間)。
  2. 運行產生一個包含所有我將要在未來
  3. 從工作區中刪除原始文件中工作(保存在工作區的空間)的文件和
  4. 移動輸出的輸出目錄的程序目錄出工作區並回到存儲空間

我能夠爲每個文件單獨做到這一點(即每一行工作,如果我實際上使用文件的名稱),但我不能得到爲循環工作。我對此很新,所以我可能做了一些簡單的錯誤。

任何人都可以看到我要去哪裏錯了嗎?

for i in path_to_files; do 

    #copy to home directory (from scratch) 
    cp $i . 



    #Run IDBA 
    idba_ud -l $i -o '$i'_out 

    #remove file from work directory (limited space) 

    rm $i 

    #copy out directory back to scratch 
    cp -r '$i'_out path_to_files 

done 

我不斷收到寫着

語法錯誤附近意外的標記'CP的錯誤」。

我也嘗試用複製和我/ $我用文件/ $文件替換cp沒有運氣。

+1

語言是什麼呢?看起來像bash/shell ... – BurnsBA

+0

它有望成爲一個shell腳本。 – user2151784

+0

'cp -r'$ i'_out'應該是什麼?遞歸地將'_out'後綴複製到原始目錄?這不是你要求的... –

回答

0

如果這確實是POSIX兼容的外殼(你的代碼看起來很像是,但你沒有指定實際使用的shell),則:

  • 你應該總是報價文件名,如果它包含空格或其他怪異字符:

  • 但是你應該使用單引號,因爲這將阻止她從擴展你的變量。

  • 附加文字取代的變量時,使用${}符號(例如,如果$i擴展爲「murgel」,然後${i}foo將擴大到「murgelfoo」,而$ifoo將擴大爲「」(空字符串),如果沒有可變ifoo

這樣嘗試:

filepath=/path/to/files 

for i in "${filepath}"/*; do 
    #copy to home directory (from scratch) 
    cp "${i}" . 
    #Run IDBA 
    idba_ud -l "${i}" -o "${i}_out" 
    #remove file from work directory (limited space) 
    rm $i 
    #copy out directory back to scratch 
    cp "${i}_out"/* "${filepath}"/ 
done 
+0

這工作。非常感謝你的幫助!你的解釋非常有用。但是,我確實有一個問題。現在我可以使命令起作用了(即這個問題已經解決了)但是我得到錯誤「cp:can not stat」{/ path/to/files/*}':沒有這樣的文件或目錄「但是,我知道通過手動複製文件和檢查它用pwd表示路徑是正確的。有任何想法嗎? – user2151784

+0

好像你有一個'$'太多了...... –