how to find bunch of files and archive them in one line of bash

Posted on

Problem :

let’s say I’d like to find all the files with suffix .wzd under the current directory and archive all the files founded at a time, how can I do it?

the following doesn’t work, by the way

find . -name "*.wzd" 2>/dev/null -exec tar -cvf wzd.tar {} ;

Solution :

Use -print0 with find to output null-delimited filenames, and pipe to tar using -T - --null to read null-delimited filenames from stdin.

find ... -print0 | tar ... -T - --null

backticks would work too:

tar -cvf wzd.tar `find . name "*.wzd" -printf "%f "`

-exec command {} +

This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invocations of the command will be much less than the number of matched files. The command line is built in much the same way that xargs builds its command lines. Only one instance of '{}' is allowed within the command. The command is executed in the starting directory.

Leave a Reply

Your email address will not be published. Required fields are marked *