#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Finding Utilities"

config CONFIG_FIND
	bool "find"
	default n
	help
	  find is used to search your system to find specified files.

config CONFIG_FEATURE_FIND_MTIME
	bool "Enable modified time matching (-mtime) option"
	default y
	depends on CONFIG_FIND
	help
	  Allow searching based on the modification time of
	  files, in days.

config CONFIG_FEATURE_FIND_MMIN
	bool "Enable modified time matching (-min) option"
	default y
	depends on CONFIG_FIND
	help
	  Allow searching based on the modification time of
	  files, in minutes.

config CONFIG_FEATURE_FIND_PERM
	bool "Enable permissions matching (-perm) option"
	default y
	depends on CONFIG_FIND
	help
	  Enable searching based on file permissions.

config CONFIG_FEATURE_FIND_TYPE
	bool "Enable filetype matching (-type) option"
	default y
	depends on CONFIG_FIND
	help
	  Enable searching based on file type (file,
	  directory, socket, device, etc.).

config CONFIG_FEATURE_FIND_XDEV
	bool "Enable stay in filesystem (-xdev) option"
	default y
	depends on CONFIG_FIND
	help
	  This option will allow find to restrict searches to a single
	  filesystem.

config CONFIG_FEATURE_FIND_NEWER
	bool "Enable -newer option for comparing file mtimes"
	default y
	depends on CONFIG_FIND
	help
	  Support the 'find -newer' option for finding any files which have
	  a modified time that is more recent than the specified FILE.

config CONFIG_FEATURE_FIND_INUM
	bool "Enable inode number matching (-inum) option"
	default y
	depends on CONFIG_FIND
	help
	  Support the 'find -inum' option for searching by inode number.

config CONFIG_FEATURE_FIND_EXEC
	bool "Enable (-exec) option allowing execution of commands"
	default y
	depends on CONFIG_FIND
	help
	  Support the 'find -exec' option for executing commands based upon
	  the files matched.

config CONFIG_GREP
	bool "grep"
	default n
	help
	  grep is used to search files for a specified pattern.

config CONFIG_FEATURE_GREP_EGREP_ALIAS
	bool "Support extended regular expressions (egrep & grep -E)"
	default y
	depends on CONFIG_GREP
	help
	  Enabled support for extended regular expressions.  Extended
	  regular expressions allow for alternation (foo|bar), grouping,
	  and various repetition operators.

config CONFIG_FEATURE_GREP_FGREP_ALIAS
	bool "Alias fgrep to grep -F"
	default y
	depends on CONFIG_GREP
	help
	  fgrep sees the search pattern as a normal string rather than
	  regular expressions.
	  grep -F is always builtin, this just creates the fgrep alias.

config CONFIG_FEATURE_GREP_CONTEXT
	bool "Enable before and after context flags (-A, -B and -C)"
	default y
	depends on CONFIG_GREP
	help
	  Print the specified number of leading (-B) and/or trailing (-A)
	  context surrounding our matching lines.
	  Print the specified number of context lines (-C).

config CONFIG_XARGS
	bool "xargs"
	default n
	help
	  xargs is used to execute a specified command on
	  every item from standard input.

config CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION
	bool "Enable prompt and confirmation option -p"
	default n
	depends on CONFIG_XARGS
	help
	  Support prompt the user about whether to run each command
	  line and read a line from the terminal.

config CONFIG_FEATURE_XARGS_SUPPORT_QUOTES
	bool "Enable support single and double quotes and backslash"
	default n
	depends on CONFIG_XARGS
	help
	  Default xargs unsupport single and double quotes
	  and backslash for can use aruments with spaces.

config CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT
	bool "Enable support options -x"
	default n
	depends on CONFIG_XARGS
	help
	  Enable support exit if the size (see the -s or -n option)
	  is exceeded.

config CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM
	bool "Enable options -0"
	default n
	depends on CONFIG_XARGS
	help
	  Enable input filenames are terminated by a null character
	  instead of by whitespace, and the quotes and backslash
	  are not special.

endmenu
