如何使用bash变量保存find的printf语句的格式

时间:2018-09-27 18:47:09

标签: bash variables format find printf

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

1 个答案:

答案 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[@]}"