2015-05-04 46 views
1

我有一個.csv文件,其中列8(名爲filepath)包含我想要在Linux中複製到我的個人文件夾的文件的文件位置。現在我想遍歷這一列,並使用cp函數將文件複製到我家中的文件夾。我試圖做到以下幾點:如何使用循環播放csv文件來複制文件

#!/bin/bash 
while read filepath 
do 
    for filepath in $filepath 
     cp $filepath /home/files 
    done 
done < files.csv 

然而,這似乎並不奏效。當我用echo語句替換for循環中的'cp'時,它沒有打印出文件位置,而是打印出文件的整行。

感謝你的幫助,

+0

你的輸入數據是什麼樣的?你可以[編輯]給我們看幾行? –

回答

2

如果它是一個CSV文件,那麼每場都以逗號(默認)分開,並且可以使用cut來選擇您需要的一個。

cut -d, -f8 files.csv | xargs -i cp {} /home/files/ 
+0

謝謝!這工作得很好!我沒有想到切斷功能 – philipovic

+2

如果你有支持'-t/- target-directory'開關的'cp'版本,你可以這樣做:'cut -d,-f8 files.csv | xargs cp -t/home/files' - 這種方法的優點是'cp'將被調用最少次數,而不是每個文件一次。 –

1

您可以逐行讀取CSV文件一行到BASH陣列和陣列使用第八元素:

#!/bin/bash 

while read -ra cols 
do 
    cp "${cols[7]}" /home/files 
done < files.csv 

如果CSV文件逗號分隔,然後使用:

while IFS=, read -ra cols 
do 
    cp "${cols[7]}" /home/files 
done < files.csv 
+1

這也做了這項工作,是一個很好的選擇正確的答案我選擇 – philipovic