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.