git-annex/doc/tips/powerful_file_matching.mdwn
Joey Hess e213ef310f git-annex (5.20140717) unstable; urgency=high
* Fix minor FD leak in journal code. Closes: #754608
  * direct: Fix handling of case where a work tree subdirectory cannot
    be written to due to permissions.
  * migrate: Avoid re-checksumming when migrating from hashE to hash backend.
  * uninit: Avoid failing final removal in some direct mode repositories
    due to file modes.
  * S3: Deal with AWS ACL configurations that do not allow creating or
    checking the location of a bucket, but only reading and writing content to
    it.
  * resolvemerge: New plumbing command that runs the automatic merge conflict
    resolver.
  * Deal with change in git 2.0 that made indirect mode merge conflict
    resolution leave behind old files.
  * sync: Fix git sync with local git remotes even when they don't have an
    annex.uuid set. (The assistant already did so.)
  * Set gcrypt-publish-participants when setting up a gcrypt repository,
    to avoid unncessary passphrase prompts.
    This is a security/usability tradeoff. To avoid exposing the gpg key
    ids who can decrypt the repository, users can unset
    gcrypt-publish-participants.
  * Install nautilus hooks even when ~/.local/share/nautilus/ does not yet
    exist, since it is not automatically created for Gnome 3 users.
  * Windows: Move .vbs files out of git\bin, to avoid that being in the
    PATH, which caused some weird breakage. (Thanks, divB)
  * Windows: Fix locking issue that prevented the webapp starting
    (since 5.20140707).

# imported from the archive
2014-07-17 11:27:25 -04:00

36 lines
1.3 KiB
Markdown

git-annex has a powerful syntax for making it act on only certain files.
The simplest thing is to exclude some files, using wild cards:
git annex get --exclude '*.mp3' --exclude '*.ogg'
But you can also exclude files that git-annex's [[location_tracking]]
information indicates are present in a given repository. For example,
if you want to populate newarchive with files, but not those already
on oldarchive, you could do it like this:
git annex copy --not --in oldarchive --to newarchive
Without the --not, --in makes it act on files that *are* in the specified
repository. So, to remove files that are on oldarchive:
git annex drop --in oldarchive
Or maybe you're curious which files have a lot of copies, and then
also want to know which files have only one copy:
git annex find --copies 7
git annex find --not --copies 2
The above are the simple examples of specifying what files git-annex
should act on. But you can specify anything you can dream up by combining
the things above, with --and --or -( and -). Those last two strange-looking
options are parentheses, for grouping other options. You will probably
have to escape them from your shell.
Here are the mp3 files that are in either of two repositories, but have
less than 3 copies:
git annex find --not --exclude '*.mp3' --and \
-\( --in usbdrive --or --in archive -\) --and \
--not --copies 3