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

FreeBSD Manual Pages


home | help
INPLACE(1)		  BSD General Commands Manual		    INPLACE(1)

     inplace --	edits files in-place through given filter commands

     inplace [-DLfinstvz] [-b suffix] -e commandline [[-e commandline] ...]
	     [file ...]
     inplace [-DLfinstvz] [-b suffix] commandline [file	...]

     The inplace command is a utility to edit files in-place through given
     filter commands preserving	the original file attributes.  Mode and	owner-
     ship (user	and group) are preserved by default, and time (access and mod-
     ification)	by choice.

     Inode numbers will	change by default, but there is	a -i option with which
     given the inode number of each edited file	will be	preserved.

     As	for filter commands, a single command may be specified as the first
     argument to inplace.  To pass many	filter commands, specify each followed
     by	the -e option.

     There are some cases where	inplace	does not replace a file, such as when:

	   1.	The original file is not writable (use -f to force editing
		against	read-only files)

	   2.	A filter command fails and exits with a	non-zero return	code

	   3.	The resulted output is identical to the	original file

	   4.	The resulted output is empty (use -z to	accept empty output)

     The following command line	arguments are supported:

     --help		   Show	help and exit.

     --debug		   Turn	on debug output.

     --dereference	   By default, inplace ignores non-regular files in-
			   cluding symlinks, but this switch makes it resolve
			   (dereference) each symlink using realpath(3)	and
			   edit	the original file.

     -b	SUFFIX
     --backup-suffix SUFFIX
			   Create a backup file	with the given suffix for each
			   file.  Note that backup files will be written over
			   existing files, if any.

     --execute COMMANDLINE
			   Specify a filter command line to run	for each file
			   in which the	following placeholders can be used:

				 %0	   replaced by the original file path,
					   shell escaped with \'s as necessary

				 %1	   replaced by the source file path,
					   shell escaped with \'s as necessary

				 %2	   replaced by the destination file
					   path, shell escaped with \'s	as

				 %%	   replaced by `%'

			   Omission of %2 indicates %1 should be modified de-
			   structively,	and omission of	both %1	and %2 implies
			   "(...) < %1 > %2" around the	command	line.

			   When	the filter command is run, the destination
			   file	is always an empty temporary file, and the
			   source file is either the original file or a	tempo-
			   rary	copy file.

			   Every temporary file	has the	same suffix as the
			   original file, so that file name aware programs can
			   play	nicely with it.

			   Instead of specifying a whole command line, you can
			   use a command alias defined in a configuration
			   file, ~/.inplace.  See the FILES section for	the
			   file	format.

			   This	option can be specified	many times, and	they
			   will	be executed in sequence.  A file is only re-
			   placed if all of them succeeds.

			   See the EXAMPLES section below for details.

     --force		   By default, inplace does not	perform	editing	if a
			   file	is not writable.  This switch makes it force
			   editing even	if a file to process is	read-only.

     --preserve-inode	   Make	sure to	preserve the inode number of each

     --dry-run		   Do not perform any destructive operation and	just
			   show	what would have	been done.  This switch	im-
			   plies -v.

     --same-directory	   Create a temporary file in the same directory as
			   each	replaced file.	This may speed up the perfor-
			   mance when the directory in question	is on a	parti-
			   tion	that is	fast enough and	the system temporary
			   directory is	slow.

			   This	switch can be effectively used when the	tempo-
			   rary	directory does not have	sufficient disk	space
			   for a resulted file.

			   If this option is specified,	edited files will have
			   newly assigned inode	numbers.  To prevent this, use
			   the -i option.

     --preserve-timestamp  Preserve the	access and modification	times of each

     --verbose		   Turn	on verbose mode.

     --accept-empty	   By default, inplace does not	replace	the original
			   file	when a resulted	file is	empty in size because
			   it is likely	that there is a	mistake	in the filter
			   command.  This switch makes it accept empty (zero-
			   sized) output and replace the original file with

     +o	 Sort files in-place using sort(1):

	       inplace sort file1 file2	file3

	 Below works the same as above,	passing	each input file	via the	com-
	 mand line argument:

	       inplace 'sort %1	> %2' file1 file2 file3

     +o	 Perform in-place charset conversion and newline code conversion:

	       inplace -e 'iconv -f EUC-JP -t UTF-8' -e	'perl -pe "s/$/\\r/"'
	       file1 file2 file3

     +o	 Process image files taking backup files:

	       inplace -b.orig 'convert	-rotate	270 -resize 50%% %1 %2'	*.jpg

     +o	 Perform a mass	MP3 tag	modification without changing timestamps:

	       find mp3/Some_Artist -name '*.mp3' -print0 | xargs -0 inplace
	       -te 'mp3info -a "Some Artist" -g	"Progressive Rock" %1'

	 As you	see above, inplace makes a nice	combo with find(1) and

     ~/.inplace	 The configuration file, which syntax is described as follows:

		 +o   Each alias	definition is a	name/value pair	separated with
		     an	"=", one per line.

		 +o   White spaces at the beginning or the end of a line, and
		     around assignment separators ("=")	are stripped off.

		 +o   Lines starting with a "#" are ignored.

     TEMP    Temporary directory candidates where inplace attempts to create
	     intermediate output files,	in that	order.	If none	is available
	     and writable, /tmp	is used.  If -s	is specified, they will	not be

     find(1), xargs(1),	realpath(3)

     Akinori MUSHA <>

     inplace cannot always preserve timestamps in full precision depending on
     the ruby interpreter and the platform that	inplace	runs on, that is, ruby
     1.9 and later supports timestamps in nanoseconds but setting file time-
     stamps in nanosecond precision is only possible if	the platform supports

     So, a problem can arise if	the file system	supports nanoseconds, like
     ext4 and ZFS, but the platform does not have the system call to set time-
     stamps in nanoseconds, like Linux < 2.6.22, glibc < 2.6 and FreeBSD, that
     the sub-microsecond part of a timestamp cannot be preserved.

FreeBSD			       November	22, 2012		       FreeBSD


Want to link to this manual page? Use this URL:

home | help