# DO NOT EDIT. This file is generated from Config.src
#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Finding Utilities"

config FIND
	bool "find"
	default y
	help
	  find is used to search your system to find specified files.

config FEATURE_FIND_PRINT0
	bool "Enable -print0: NUL-terminated output"
	default y
	depends on FIND
	help
	  Causes output names to be separated by a NUL character
	  rather than a newline. This allows names that contain
	  newlines and other whitespace to be more easily
	  interpreted by other programs.

config FEATURE_FIND_MTIME
	bool "Enable -mtime: modified time matching"
	default y
	depends on FIND
	help
	  Allow searching based on the modification time of
	  files, in days.

config FEATURE_FIND_MMIN
	bool "Enable -mmin: modified time matching by minutes"
	default y
	depends on FIND
	help
	  Allow searching based on the modification time of
	  files, in minutes.

config FEATURE_FIND_PERM
	bool "Enable -perm: permissions matching"
	default y
	depends on FIND
	help
	  Enable searching based on file permissions.

config FEATURE_FIND_TYPE
	bool "Enable -type: file type matching (file/dir/link/...)"
	default y
	depends on FIND
	help
	  Enable searching based on file type (file,
	  directory, socket, device, etc.).

config FEATURE_FIND_XDEV
	bool "Enable -xdev: 'stay in filesystem'"
	default y
	depends on FIND
	help
	  This option allows find to restrict searches to a single filesystem.

config FEATURE_FIND_MAXDEPTH
	bool "Enable -mindepth N and -maxdepth N"
	default y
	depends on FIND
	help
	  This option enables -mindepth N and -maxdepth N option.

config FEATURE_FIND_NEWER
	bool "Enable -newer: compare file modification times"
	default y
	depends on FIND
	help
	  Support the 'find -newer' option for finding any files which have
	  modification time that is more recent than the specified FILE.

config FEATURE_FIND_INUM
	bool "Enable -inum: inode number matching"
	default y
	depends on FIND
	help
	  Support the 'find -inum' option for searching by inode number.

config FEATURE_FIND_EXEC
	bool "Enable -exec: execute commands"
	default y
	depends on FIND
	help
	  Support the 'find -exec' option for executing commands based upon
	  the files matched.

config FEATURE_FIND_USER
	bool "Enable -user: username/uid matching"
	default y
	depends on FIND
	help
	  Support the 'find -user' option for searching by username or uid.

config FEATURE_FIND_GROUP
	bool "Enable -group: group/gid matching"
	default y
	depends on FIND
	help
	  Support the 'find -group' option for searching by group name or gid.

config FEATURE_FIND_NOT
	bool "Enable the 'not' (!) operator"
	default y
	depends on FIND
	help
	  Support the '!' operator to invert the test results.
	  If 'Enable full-blown desktop' is enabled, then will also support
	  the non-POSIX notation '-not'.

config FEATURE_FIND_DEPTH
	bool "Enable -depth"
	default y
	depends on FIND
	help
	  Process each directory's contents before the directory itself.

config FEATURE_FIND_PAREN
	bool "Enable parens in options"
	default y
	depends on FIND
	help
	  Enable usage of parens '(' to specify logical order of arguments.

config FEATURE_FIND_SIZE
	bool "Enable -size: file size matching"
	default y
	depends on FIND
	help
	  Support the 'find -size' option for searching by file size.

config FEATURE_FIND_PRUNE
	bool "Enable -prune: exclude subdirectories"
	default y
	depends on FIND
	help
	  If the file is a directory, dont descend into it. Useful for
	  exclusion .svn and CVS directories.

config FEATURE_FIND_DELETE
	bool "Enable -delete: delete files/dirs"
	default y
	depends on FIND && FEATURE_FIND_DEPTH
	help
	  Support the 'find -delete' option for deleting files and directories.
	  WARNING: This option can do much harm if used wrong. Busybox will not
	  try to protect the user from doing stupid things. Use with care.

config FEATURE_FIND_PATH
	bool "Enable -path: match pathname with shell pattern"
	default y
	depends on FIND
	help
	  The -path option matches whole pathname instead of just filename.

config FEATURE_FIND_REGEX
	bool "Enable -regex: match pathname with regex"
	default y
	depends on FIND
	help
	  The -regex option matches whole pathname against regular expression.

config FEATURE_FIND_CONTEXT
	bool "Enable -context: security context matching"
	default n
	depends on FIND && SELINUX
	help
	  Support the 'find -context' option for matching security context.

config FEATURE_FIND_LINKS
	bool "Enable -links: link count matching"
	default y
	depends on FIND
	help
	  Support the 'find -links' option for matching number of links.
config GREP
	bool "grep"
	default y
	help
	  grep is used to search files for a specified pattern.

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

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

config FEATURE_GREP_CONTEXT
	bool "Enable before and after context flags (-A, -B and -C)"
	default y
	depends on 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 XARGS
	bool "xargs"
	default y
	help
	  xargs is used to execute a specified command for
	  every item from standard input.

config FEATURE_XARGS_SUPPORT_CONFIRMATION
	bool "Enable -p: prompt and confirmation"
	default y
	depends on XARGS
	help
	  Support -p: prompt the user whether to run each command
	  line and read a line from the terminal.

config FEATURE_XARGS_SUPPORT_QUOTES
	bool "Enable single and double quotes and backslash"
	default y
	depends on XARGS
	help
	  Support quoting in the input.

config FEATURE_XARGS_SUPPORT_TERMOPT
	bool "Enable -x: exit if -s or -n is exceeded"
	default y
	depends on XARGS
	help
	  Support -x: exit if the command size (see the -s or -n option)
	  is exceeded.

config FEATURE_XARGS_SUPPORT_ZERO_TERM
	bool "Enable -0: NUL-terminated input"
	default y
	depends on XARGS
	help
	  Support -0: input items are terminated by a NUL character
	  instead of whitespace, and the quotes and backslash
	  are not special.

endmenu
