gpt4 book ai didi

linux - Makefile:从文件读取时使用 cp 命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:57 29 4
gpt4 key购买 nike

在 makefile 中,我正在做这样的事情 -

@while read -r file; do \
if [ ! -z "$$file" ]; then \
cp -R path/to/someplace/$$file path/to/someplace/else/$$file \
fi \
done <filename.txt

filename.txt 包含文件和文件夹,如 -

abc/*.txt
folder1/
folder2/
textfile.txt

我能够复制文件和文件夹,但在 abc/*.txt 的情况下,它显示错误:

cp: target `/path/to/someplace/else/*.txt' is not a directory.

有什么方法可以复制这些带有通配符的文件吗?

最佳答案

其实问题不在于模式扩展。该位似乎按预期工作。该错误实际上是由于生成的 cp 命令引起的。例如,您最终得到:

cp abc/a.txt abc/b.txt other/path/abc/*.txt

但是,对于多个源文件,cp 期望目标是一个目录,而 other/place/abc/* 不是(如果您创建了它,可能是这样,但不太可能是你想要的)。

就是说。例如,您可以通过调用 mkdir -p other/path/`dirname $$file`(为 make 转义 $)并使用 cp< 创建目标目录 也使用 `dirname $$file` 作为目的地。

有一些注意事项。例如,如果遇到绝对路径或全局字符也用于通向文件本身的目录(dir?/*.txtsome/*/file ).使用例如 tarcpio 可能会更安全:

tar cf - -C /source/path src/*.txt  | tar xf - -C /target/path/

关于linux - Makefile:从文件读取时使用 cp 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54062704/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com