将文件从一个目录复制/粘贴到另一个目录

问题描述:

你能告诉我我的简单代码有什么问题吗? (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://*.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

像这样的东西应该做的工作,使用类似的编号行为,你在你的问题中提到的。

#!/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