mirror of https://github.com/mirror/busybox.git
implement -print0 for find
parent
f7897ec47b
commit
d7384296f6
|
@ -11,6 +11,16 @@ config CONFIG_FIND
|
||||||
help
|
help
|
||||||
find is used to search your system to find specified files.
|
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
|
config CONFIG_FEATURE_FIND_MTIME
|
||||||
bool "Enable modified time matching (-mtime) option"
|
bool "Enable modified time matching (-mtime) option"
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -38,6 +38,9 @@ static const char msg_req_arg[] = "option `%s' requires an argument";
|
||||||
static const char msg_invalid_arg[] = "invalid argument `%s' to `%s'";
|
static const char msg_invalid_arg[] = "invalid argument `%s' to `%s'";
|
||||||
|
|
||||||
static char *pattern;
|
static char *pattern;
|
||||||
|
#ifdef CONFIG_FEATURE_FIND_PRINT0
|
||||||
|
static char printsep = '\n';
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_FIND_TYPE
|
#ifdef CONFIG_FEATURE_FIND_TYPE
|
||||||
static int type_mask = 0;
|
static int type_mask = 0;
|
||||||
|
@ -159,7 +162,11 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_FIND_PRINT0
|
||||||
|
printf("%s%c", fileName, printsep);
|
||||||
|
#else
|
||||||
puts(fileName);
|
puts(fileName);
|
||||||
|
#endif
|
||||||
no_match:
|
no_match:
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
@ -217,6 +224,10 @@ int find_main(int argc, char **argv)
|
||||||
else if (strcmp(argv[i], "-print") == 0) {
|
else if (strcmp(argv[i], "-print") == 0) {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_FEATURE_FIND_PRINT0
|
||||||
|
else if (strcmp(argv[i], "-print0") == 0)
|
||||||
|
printsep = '\0';
|
||||||
|
#endif
|
||||||
else if (strcmp(argv[i], "-name") == 0) {
|
else if (strcmp(argv[i], "-name") == 0) {
|
||||||
if (++i == argc)
|
if (++i == argc)
|
||||||
bb_error_msg_and_die(msg_req_arg, "-name");
|
bb_error_msg_and_die(msg_req_arg, "-name");
|
||||||
|
|
|
@ -748,7 +748,9 @@ USE_FEATURE_DATE_ISOFMT( \
|
||||||
"\t-follow\t\tDereference symbolic links\n" \
|
"\t-follow\t\tDereference symbolic links\n" \
|
||||||
"\t-name PATTERN\tFile name (leading directories removed) matches PATTERN\n" \
|
"\t-name PATTERN\tFile name (leading directories removed) matches PATTERN\n" \
|
||||||
"\t-print\t\tPrint (default and assumed)\n" \
|
"\t-print\t\tPrint (default and assumed)\n" \
|
||||||
USE_FEATURE_FIND_TYPE( \
|
USE_FEATURE_FIND_PRINT0( \
|
||||||
|
"\t-print0\t\tDelimit output with null characters rather than\n\t\t\tnewlines" \
|
||||||
|
) USE_FEATURE_FIND_TYPE( \
|
||||||
"\n\t-type X\t\tFiletype matches X (where X is one of: f,d,l,b,c,...)" \
|
"\n\t-type X\t\tFiletype matches X (where X is one of: f,d,l,b,c,...)" \
|
||||||
) USE_FEATURE_FIND_PERM( \
|
) USE_FEATURE_FIND_PERM( \
|
||||||
"\n\t-perm PERMS\tPermissions match any of (+NNN); all of (-NNN);\n\t\t\tor exactly (NNN)" \
|
"\n\t-perm PERMS\tPermissions match any of (+NNN); all of (-NNN);\n\t\t\tor exactly (NNN)" \
|
||||||
|
|
Loading…
Reference in New Issue