2016-03-04 198 views
2

你能告訴我我的簡單代碼有什麼問題嗎? (Mac Bash)將文件從一個目錄複製/粘貼到另一個目錄

我想將所有名爲vol_0000.nii的文件從一個目錄複製到另一個目錄。我用'*'替換了變量文件名。所有文件(vol_0000.nii)具有相同的名稱,但它們位於不同的文件夾中(用'*'表示)。林不知道是否他們正在複製他們互相替換,因爲他們有相同的名稱創建的cp,例如,vol_00001.nii,vol_00002.nii等等。?

cp /Users/dave/biomkr/dat/*/rs/orig/vol_0000.nii /Users/dave/Documents/MIT_Har_stu/rsfmri 
+0

[這個問題](http://stackoverflow.com/q/12187859/3076724)可能是對點 – BroSlow

+0

所以除了數量問題,應我的代碼工作,如果該卷有不同的數字? – tsumaranaina

+0

是的,假設你有'/ Users/dave/biomkr/dat/a/rs/orig/vol_0000.nii'和'/ Users/dave/biomkr/dat/b/rs/orig/vol_0000.nii', 'cp /Users/dave/biomkr/dat/*/rs/orig/vol_0000.nii/Users/dave/Documents/MIT_Har_stu/rsfmri'將展開爲'cp/Users/dave/biomkr/dat/a/rs/orig /vol_0000.nii /Users/dave/biomkr/dat/b/rs/orig/vol_0000.nii/Users/dave/Documents/MIT_Har_stu/rsfmri'('a','b',order may be switched)which will first將'a'中的文件複製到'rsfmri',然後用'b'中的文件將其覆蓋。你可以'執行cp -iv',如果你想覆蓋並且更加詳細,它會提示你 – BroSlow

回答

1

像這樣的東西應該做的工作,使用類似的編號行爲,你在你的問題中提到的。

#!/bin/bash 
i=0 
for src in /Users/dave/biomkr/dat/*/rs/orig/vol_0000.nii 
do 
    dest=$(basename "$src") 
    dest=${dest/.nii/_$i.nii} 
    cp "$src" "/Users/dave/Documents/MIT_Har_stu/rsfmri/$dest" 
    let i++ 
done 

另一種選擇是創建一個子目錄,基於原有的水珠,我們可以用一個小string replacement得到*取代目錄名。

#!/bin/bash 
for src in /Users/dave/biomkr/dat/*/rs/orig/vol_0000.nii 
do 
    srcdir=${src#/Users/dave/biomkr/dat/} 
    srcdir=${srcdir%/rs/orig/vol_0000.nii} 
    srcdir="/Users/dave/Documents/MIT_Har_stu/rsfmri/$srcdir/" 
    mkdir -p "$srcdir" 
    cp "$src" "$srcdir" 
done 
+0

謝謝。第一個沒有給出錯誤,但輸出只有一個卷文件! 將嘗試第二個。 此外,輸出是vol_0000.nii.0>這是我想要的不同。這個改變了實際的擴展。輸出col看起來不同於原始的vol文件! – tsumaranaina

+0

好吧,我把最後一部分改爲「$ dest_ $ i.nii」,它工作! 謝謝,只要我有足夠的聲譽,我就投你一票! :) – tsumaranaina

+0

很高興提供幫助。您可以將答案標記爲在任何聲望級別接受。這表明問題已經結束,並且也會給你一些代表。 – miken32

相關問題