mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 05:20:30 +00:00
find: Implement support for multiple directories
This commit is contained in:
parent
5a21c3b389
commit
0ca63cfd6e
Notes:
sideshowbarker
2024-07-17 23:12:25 +09:00
Author: https://github.com/timschumi Commit: https://github.com/SerenityOS/serenity/commit/0ca63cfd6e9 Pull-request: https://github.com/SerenityOS/serenity/pull/11044 Reviewed-by: https://github.com/alimpfard Reviewed-by: https://github.com/awesomekling
2 changed files with 23 additions and 18 deletions
|
@ -5,13 +5,13 @@ find - recursively search for files
|
|||
## Synopsis
|
||||
|
||||
```**sh
|
||||
$ find [-L] [root-path] [commands...]
|
||||
$ find [-L] [root-paths...] [commands...]
|
||||
```
|
||||
|
||||
## Description
|
||||
|
||||
`find` recursively traverses the file hierarchy starting at the given root path
|
||||
(or at the current working directory if the root path is not specified), and
|
||||
`find` recursively traverses the file hierarchy starting at the given root paths
|
||||
(or at the current working directory if no root paths have been specified), and
|
||||
evaluates the given commands for each found file. The commands can be used to
|
||||
both filter the set of files and to perform actions on them.
|
||||
|
||||
|
|
|
@ -541,7 +541,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
args.append(arguments.argv + 1, arguments.argc - 1);
|
||||
|
||||
OwnPtr<Command> command;
|
||||
LexicalPath root_path = LexicalPath(".");
|
||||
Vector<LexicalPath> paths;
|
||||
|
||||
while (!args.is_empty()) {
|
||||
char* raw_arg = args.take_first();
|
||||
|
@ -549,7 +549,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
if (arg == "-L") {
|
||||
g_follow_symlinks = true;
|
||||
} else if (!arg.starts_with('-')) {
|
||||
root_path = LexicalPath(arg);
|
||||
paths.append(LexicalPath(arg));
|
||||
} else {
|
||||
// No special case, so add back the argument and try to parse a command.
|
||||
args.prepend(raw_arg);
|
||||
|
@ -560,21 +560,26 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
if (!command)
|
||||
command = make<PrintCommand>();
|
||||
|
||||
String dirname = root_path.dirname();
|
||||
String basename = root_path.basename();
|
||||
if (paths.is_empty())
|
||||
paths.append(LexicalPath("."));
|
||||
|
||||
int dirfd = TRY(Core::System::open(dirname, O_RDONLY | O_DIRECTORY | O_CLOEXEC));
|
||||
for (auto& path : paths) {
|
||||
String dirname = path.dirname();
|
||||
String basename = path.basename();
|
||||
|
||||
FileData file_data {
|
||||
root_path,
|
||||
dirfd,
|
||||
basename.characters(),
|
||||
(struct stat) {},
|
||||
false,
|
||||
DT_UNKNOWN,
|
||||
};
|
||||
walk_tree(file_data, *command);
|
||||
close(dirfd);
|
||||
int dirfd = TRY(Core::System::open(dirname, O_RDONLY | O_DIRECTORY | O_CLOEXEC));
|
||||
|
||||
FileData file_data {
|
||||
path,
|
||||
dirfd,
|
||||
basename.characters(),
|
||||
(struct stat) {},
|
||||
false,
|
||||
DT_UNKNOWN,
|
||||
};
|
||||
walk_tree(file_data, *command);
|
||||
close(dirfd);
|
||||
}
|
||||
|
||||
return g_there_was_an_error ? 1 : 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue