NAME
Mac::Finder::Tags - Access macOS file tags (aka Finder labels)
VERSION
version 0.02
SYNOPSIS
my $ft = Mac::Finder::Tags->new();
# optional caching of all tagged files on startup
my $ft = Mac::Finder::Tags->new( caching => 1 );
# manually choose an implementation variant
my $ft = Mac::Finder::Tags->new( impl => 'mdls' );
my $ft = Mac::Finder::Tags->new( impl => 'xattr' );
# read tags from a file
my @tags = $ft->get_tags( $path );
# obtain tag details
my $name = $tag->name;
my $color = $tag->color;
my $flags = $tag->flags; # Finder label flags (numeric color code)
my $emoji = $tag->emoji; # an Emoji approximating the color
my $is_legacy = $tag->legacy_label; # legacy Finder label
my $is_guessed = $tag->color_guessed; # color is uncertain or
# undetermined (mdls only)
# modify tags of a file
my $tag1 = $ft->tag( 'Important', 'orange' );
my $tag2 = $ft->tag( 'Client 276' );
$ft->set_tags( $path, @tags );
$ft->add_tags( $path, @tags );
$ft->remove_tags( $path, @tags );
# list all tags defined on the system
my @tags = $ft->all_tags();
# search entire system for files by tag
my @files = $ft->find_files_all( @tags );
my @files = $ft->find_files_any( @tags );
DESCRIPTION
This class offers methods to read and write macOS file system tags (the feature that replaced Mac OS Finder labels from OS X 10.9).
This software has pre-release quality. There is little documentation and no schedule for further development.
PERFORMANCE CONSIDERATIONS
The implementation based on mdls
is much faster than the one based on xattr
. However, mdls
doesn't provide the color of tags for files that have multiple tags. This issue is mitigated to some extent when caching is enabled.
When caching is enabled, all tags on the entire system will be cached using mdfind
at object creation time (however, files in locations not indexed by Spotlight are skipped). get_tags()
will then only perform lookups in this cache, which is extremely fast. You should consider caching whenever you intend to look up more than maybe a hundred or so files; however, if your system has an extremely large number of tagged files or a large number of different tags, cache creation may cause a significant delay. You may wish to run your own performance tests for your environment.
By default, this module will use mdls
when caching is disabled, and xattr
when caching is enabled (in which case the speed difference doesn't matter as much).
BUGS
The semantics of tags without color (legacy Finder labels flag 0
) and tags with no defined color (because it is undetermined or unknown) are not yet clearly differentiated.
The following methods are unimplemented in this version:
add_tags
set_tags
find_files_all
find_files_any
remove_tags
This software may not work on other filesystems than HFS+ or APFS. It has not been tested on all macOS versions.
AUTHOR
Arne Johannessen <ajnn@cpan.org>
If you contact me by email, please make sure you include the word "Perl" in your subject header to help beat the spam filters.
COPYRIGHT AND LICENSE
This software is Copyright (c) 2022-2023 by Arne Johannessen.
This is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0 or (at your option) the same terms as the Perl 5 programming language system itself.