Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PKGS_WHICH(1)	      User Contributed Perl Documentation	 PKGS_WHICH(1)

NAME
       pkgs_which - Quickly find packages where	trees of files got installed

SYNOPSIS
       pkgs_which [-oqvsd] {dir|file} [...]

       pkgs_which {-h|-?|--help}

       pkgs_which --man

OPTIONS
	   --origins, -o      print package origins instead of names
	   --quiet, -q	      only print actual	package	names
	   --verbose, -v      also print unmatched files
	   --sort, -s	      sort package and file lists
	   --[no-]cacheall    read and cache all package file lists first
	   --[no-]find	      descend directories on the command line [default]

	   --debug, -d	      emit additional debug information	on stderr

	   --help, -h, -?     print a brief help message and quit
	   --man	      show the full full documentation and quit

       Long options can	be abbreviated to the shortest unambiguous string.
       Short options can be bundled (Example: pkgs_which -qo ...).

DESCRIPTION
       pkgs_which is a tool to efficiently look	up which FreeBSD ports or
       packages	installed the files on its command line, or the	files in the
       directories on the command line.

       pkgs_which

       o   accepts files on the	command	line, which are	looked up directly,

       o   accepts directories on the command line, which are recursively
	   scanned for regular files, which are	then looked up,

       o   accepts an arbitrary	mix of files and directories on	the command
	   line,

       o   prints each port or package only once,

       o   prints port/package names by	default, but can print origins instead
	   (--origins option).

       o   supports a "quiet" mode that	emits output suitable for scripting
	   and shell command expansion (see EXAMPLES below)

       o   is optimized	for efficient bulk lookups of data without assistance
	   of an on-disk database.

       It is most useful for quickly obtaining a list of site-packages that
       need to be reinstalled after upgrading a	script language	interpreter to
       a new version that uses new directories for its site-packages, for
       instance, after a Python	2.6 => 2.7 or Perl 5.10	=> 5.12	upgrade, and
       is a good companion to portmaster(8).

   IMPLEMENTATION NOTES
       pkgs_which uses pkg_info	-L to accelerate the process. It first obtains
       a list of all files, looks at a random one, looks up the	corresponding
       package and records its name, and then purges all files belonging to it
       before looking up the next file.

       pkgs_which does not spawn subshells for pkg_info	for security reasons,
       and makes sure to launder the pkg_info output.

       The --cacheall option (default on) makes	pkgs_which read	all package
       file lists upon start. This takes a few seconds on a GHz-class computer
       but voids the need to run pkg_info -W often later on.

       For looking up very few files, it is more efficient to use
       --no-cacheall.

   RELATED TOOLS
       pkgs_which performs a similar task to pkg_which(1) that is part of the
       ports-mgmt/portupgrade port, but	unlike the latter, it does not require
       a database, and is optimized for	bulk lookups of	entire directory
       trees.

       portmaster(8) is	a tool written by Doug Barton to upgrade installed
       ports and their dependencies that does not require port/package
       databases.

EXAMPLES
       Obtain the sorted list of all packages that installed at	least one file
       under /usr/local/lib/python2.6/site-packages:

	 pkgs_which --sort /usr/local/lib/python2.6/site-packages

       Upgrade all packages that installed at least one	file under
       /usr/local/lib/python2.6/site-packages (this assumes a Bourne-shell
       such as sh, ash,	ksh, bash):

	 portmaster -d $(pkgs_which -qo	/usr/local/lib/python2.6/site-packages)

SEE ALSO
       pkg_info(8), portmaster(8), portupgrade(8), pkg_which(8)

HISTORY
       0.4.1 2014-02-11
	 - do not require files	given on command line are regular files,
	   but accept any non-directory	(for instance, symlinks).

	   Workaround for previous versions: use --no-find if you intend to
	   look	up non-regular files.

       0.4.0 2013-11-28
	 - support pkgNG. Known	issue is that pkg which	returns	bogus exit
	   codes, spamming your	screen.	 pkgs_which works nonetheless.
	   https://github.com/freebsd/pkg/issues/657

	   Note	that pkgNG always uses --nocache implictly for speed:
	   https://github.com/freebsd/pkg/issues/658

	   Known issue:	the pkgNG detection is a hack. It just looks for the
	   executable and the database in default locations, but does not
	   attempt to run "pkg -N".

       0.3.0 2013-03-11
	 - read	pkg_info -L information	in chunks of 100 packages at a time,
	   to avoid forking once per package, which was	slow.

       0.2.0 2011-07-25
	 - fixed a bug where skipping non-existent command line	arguments
	   failed and resulted in an unterminated (endless) loop.

	 - added the --no-find option

       0.1.0 2011-03-12
	 - pkgs_which made its first appearance	in the FreeBSD ports tree

       The current CVS Version tag is:

	$FreeBSD: branches/2021Q1/ports-mgmt/pkgs_which/files/pkgs_which 343829	2014-02-11 22:50:26Z mandree $

AUTHORS
       Copyright 2011, 2013 Matthias Andree <mandree@FreeBSD.org>.  All	rights
       reserved. This script is	exclusively licensed under the GNU General
       Public License version 3, or any	later version.

perl v5.32.1			  2021-01-05			 PKGS_WHICH(1)

NAME | SYNOPSIS | OPTIONS | DESCRIPTION | EXAMPLES | SEE ALSO | HISTORY | AUTHORS

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=pkgs_which&sektion=1&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help