我正在尝试为makefile中的某个目录(作为参数传递)下的每个文件收集文件路径和时间戳
所以,就是这样。
TIMESTAMP_LOG := timestamp.log
TARGET_ROOT := ../../out/root
define collect-timestamp
$(shell find $(1) | xargs -lfn sh -c 'echo -n fn"," >> $(TIMESTAMP_LOG); stat -c %Y fn >> $(TIMESTAMP_LOG)')
endef
all:
$(call collect-timestamp, $(TARGET_ROOT))
如果我运行这个,我会得到如下所示的整个文件路径和时间戳 ex)../../ out / root / bin / ls,133030303
但是我想摆脱文件路径中的“../../out/root”。(如果可能的话,作为参数传递)
我以为我可以使用sed或shell脚本(见下文)这样做,但显然我被卡住了。我试过了:
$(shell find $(1) | xargs -Ifn sh -c 'echo -n ${fn##$(1)}"," >> $(TIMESTAMP_LOG); stat -c %Y fn >> $(TIMESTAMP_LOG)')
$(shell find $(1) | xargs -Ifn sh -c 'sed 's/fn//g' >> $(TIMESTAMP_LOG); stat -c %Y fn >> $(TIMESTAMP_LOG)')
答案 0 :(得分:1)
如果您使用find
,则在大多数情况下您不需要xargs
。
以下内容应该有效:
find $(1) -exec stat -c "%n,%Y" {} \; | sed 's#$(1)\/##'
请注意,我使用$(1)作为find
和sed
替换命令的参数。
答案 1 :(得分:0)
您可以尝试
find $(1) | xargs stat -c %Y >> $(TIMESTAMP_LOG)