我试着将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文件夹中
谢谢! :)
答案 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