【问题标题】:Copy/paste files from one directory to another将文件从一个目录复制/粘贴到另一个目录
【发布时间】:2016-03-04 02:19:22
【问题描述】:

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

【问题讨论】:

  • This question 可能是正确的
  • 所以除了数字问题之外,如果 Vol 有不同的数字,我的代码应该工作吗?
  • 是的,假设你有/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/rsfmria,b,顺序可以切换)哪个将首先复制将a 中的文件复制到rsfmri,然后用b 中的文件覆盖它。您可以do cp -iv,它会提示您是否要覆盖并使其更详细
  • 是的,对不起!好吧,我试试 cp -iv。谢谢!
  • 哇,它确实问过我,但我只尝试了 500 个文件并说不要覆盖,但它没有用!!!在完成所有这些编号和未覆盖的消息后,我打开目标文件发现只有一卷!!!

标签: bash copy copy-paste


【解决方案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

另一种选择是创建一个子目录,基于替换原始 glob 中 * 的目录名称,我们可以用一点 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

【讨论】:

  • 谢谢。第一个没有错误,但输出只有一个 vol 文件!将尝试第二个。此外,输出是 vol_0000.nii.0> 这与我想要的不同。这个改变了实际的扩展。输出 col 看起来与原始 vol 文件不同!
  • 好的,我将最后一部分更改为“$dest_$i.nii”,它成功了!谢谢,只要我有足够的声誉,我就会投票给你! :)
  • 很高兴为您提供帮助。您可以在任何信誉级别将答案标记为已接受。这表明问题已经结束,并且还会给你一些代表。
猜你喜欢
  • 2012-02-09
  • 2012-02-15
  • 2017-11-18
  • 2013-06-01
  • 2020-06-22
  • 2014-08-12
  • 2013-10-24
  • 2011-10-24
相关资源
最近更新 更多