BASH SCRIPT:复制不同父文件夹中包含的许多文件(同名)

时间:2012-01-27 14:48:39

标签: bash

我试着将Jaypal的答案变成bash脚本 (see here) 这样:

#!/bin/bash
pwd
mkdir -v ../g
shopt -s globstar
for file in ./**/file.txt
do
    echo "will copy $file"
    cp -v --parents "$file" ../g
done

但它不起作用! (它只创建空文件夹g)
问题是什么?
注意:脚本在f文件夹中

谢谢! :)

2 个答案:

答案 0 :(得分:1)

回答标题问题:

source_dir=/some/dir
target_dir=/some/other/dir
file_name=myfile.txt

cd $target_dir
while read path; do
  mkdir -p $(dirname $path)
  cp $source_dir/$path $target_dir/$path
done < <(cd $source_dir; find . -name $file_name -type f)

这会将$file_name下的所有$source_dir重复到$tagert_dir

关于你的第二个问题(为什么你的代码不起作用)也许你没有bash 4+,所以globstar不工作?或者它可能返回与文件的相对路径不同的东西(我想,但是因为我有bash 3.2所以我无法检查)

答案 1 :(得分:0)

由于对mark a comment as an answer的功能请求仍然被拒绝,我在此处复制上述解决方案。

好的,我在./*/file.txt中仅使用1 * in文件解决了问题。通过这种方式它似乎正常工作。谢谢oHessling! :) - fibon82