#
# 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
