gpt4 book ai didi

linux - 设置后是否具有 find static 变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:48 24 4
gpt4 key购买 nike

如果我在 bash 脚本中使用以下内容,是否为脚本的其余部分设置了变量,还是每次调用该变量时都重新运行 find 命令?

example=$(find/path/to/files -name "test")

这就是我正在做的:

# sets new_tv_name variable
new_tv_name=$(find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" -type f -not -size -100M -not -size +2G -not -iname "*sample*" \( -iname "*s[0-9]*" -o -iname "*s[0-9][0-9]*" -o -iname "*s[0-9][0-9][0-9]*" -o -iname "*e[0-9]*" -o -iname "*e[0-9][0-9]*" -o -iname "*e[0-9][0-9][0-9]*" -o -iname "*s[0-9][0-9]e[0-9][0-9]*" -o -iname "*s[0-9][0-9]e[0-9][0-9][0-9]*" -o -iname "*s[0-9][0-9][0-9]e[0-9][0-9][0-9]*" -o -iname "*s[0-9]e[0-9][0-9]*" -o -iname "*s[0-9]e[0-9][0-9][0-9]*" -o -iname "*[0-9]x[0-9]*" -o -iname "*[0-9]x[0-9][0-9]*" -o -iname "*[0-9][0-9]x[0-9][0-9]*" -o -iname "*[0-9][0-9][0-9]x[0-9][0-9][0-9]*" -o -iname "*hdtv*" \) -exec basename {} \;)

# sets new_tv_directory variable
new_tv_directory=$(find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" -type f -not -size -100M -not -size +2G -not -iname "*sample*" \( -iname "*s[0-9]*" -o -iname "*s[0-9][0-9]*" -o -iname "*s[0-9][0-9][0-9]*" -o -iname "*e[0-9]*" -o -iname "*e[0-9][0-9]*" -o -iname "*e[0-9][0-9][0-9]*" -o -iname "*s[0-9][0-9]e[0-9][0-9]*" -o -iname "*s[0-9][0-9]e[0-9][0-9][0-9]*" -o -iname "*s[0-9][0-9][0-9]e[0-9][0-9][0-9]*" -o -iname "*s[0-9]e[0-9][0-9]*" -o -iname "*s[0-9]e[0-9][0-9][0-9]*" -o -iname "*[0-9]x[0-9]*" -o -iname "*[0-9]x[0-9][0-9]*" -o -iname "*[0-9][0-9]x[0-9][0-9]*" -o -iname "*[0-9][0-9][0-9]x[0-9][0-9][0-9]*" -o -iname "*hdtv*" \) -exec dirname {} \;)

最佳答案

任何运行 foo=$(bar) 的情况都只会在执行命令时调用一次 bar;此行为对 shell 是通用的,而不是 find 特有的。


另一方面——以这种方式存储 find 的输出是模棱两可的:您需要强制使用换行符作为分隔符来遍历多个结果,而不会出现带有空格的文件名,并且即使那样,文件名也可以在 UNIX 中合法地包含换行符。

如果您希望您的代码在所有极端情况下都能正常工作,最好使用 NUL 分隔文件并使用数组:

example=( )
while IFS= read -r -d '' filename; do
example+=( "$filename" )
done < <(find /path/to/files -name test -print0)

printf 'Found file: %q\n' "${example[@]}" # print all files found, with unprintable
# characters escaped.

如果您记录这些名称只是为了将它们传递给命令,相比之下,您可以告诉 find 自己运行该命令,而根本不需要将它们存储在 shell 中。请参阅 UsingFind 中的第 5 节(“操作”)和第 6 节(“复杂操作”)了解详情。

关于linux - 设置后是否具有 find static 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27435286/

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