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

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

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

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

          prints each port or package only once,

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

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

          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

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.42.0			  2025-10-02			 PKGS_WHICH(1)

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

home | help