Makefile:从文件读取时使用 cp 命令
Makefile: using cp command while reading from a file
在 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?/*.txt
、some/*/file
)。使用例如 tar
或 cpio
:
可能更安全
tar cf - -C /source/path src/*.txt | tar xf - -C /target/path/
在 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?/*.txt
、some/*/file
)。使用例如 tar
或 cpio
:
tar cf - -C /source/path src/*.txt | tar xf - -C /target/path/