bash
如何将变量用于find
的{{1}}语句的格式?我正在尝试转换以下内容:
-printf
打印以下内容:
find ./ -type f -printf "File: %p has modification time [%TY-%Tm-%Td %TH:%TM:%TS %TZ]\n"
我希望将printf语句保留在变量中,如下所示(但失败)。
File: ./file_20180926_220000.txt has modification time [2018-09-26 22:00:00.0000000000 CDT]
File: ./file_20180926_210000.txt has modification time [2018-09-26 21:00:00.0000000000 CDT]
File: ./file_20180926_230000.txt has modification time [2018-09-26 23:00:00.0000000000 CDT]
其输出是:
operation="-printf \"File: %p has modification time [%TY-%Tm-%Td %TH:%TM:%TS %TZ]\n\""
find ./ -type f $operation
更简单的printf格式可以工作,就像我只使用find: paths must precede expression: %p
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
一样,但是一旦我在格式中使用空格,就会出现上述错误。我也尝试过使用operation="-printf %p"
来避开空格,但是我无法使其正常工作。
如果可能的话,我想避免使用\
,除非有人可以建议如何在这种情况下安全地使用它。
注意: 以下工作有效,但需要两个变量,而我希望仅保留一个变量:
eval
答案 0 :(得分:1)
您可以在一个常规变量中存储一个参数:
print_format="File: %p has modification time [%TY-%Tm-%Td %TH:%TM:%TS %TZ]\n"
find ./ -type f -printf "$print_format"
或者您可以在一个数组中存储一个或多个参数:
find_options=( -printf "File: %p has modification time [%TY-%Tm-%Td %TH:%TM:%TS %TZ]\n" )
find ./ -type f "${find_options[@]}"