#
# 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_PRINT0
	bool "Enable -print0 option"
	default y
	depends on CONFIG_FIND
	help
	  Causes output names to be separated by a null character
	  rather than a newline.  This allows names that contain
	  newlines and other whitespace to be more easily
	  interpreted by other programs.

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 null terminated option -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
