Friday, October 9, 2009

Linux Using xargs to Copy All Files in Directory or Subdirectory

To copy all the files, for example, mp3 files in a directory/subdirectory to another directory in Linux, you can use the xargs command and the find but by using "sed" tool to also filter the quotes of file names.

The command is pretty simple which is write down below.

$> find . -name "*.mp3" | sed -r "s/'/\\\\\'/g" | xargs -t -I '{}' cp '{}' /media/disk/Music/

What it does, is that, it will find any files that ends with *.mp3 file extension from the current directory the command is being executed, and sed will will apply a regular expression to filter the quotes and replace it with "\'" (a slash and a single quote). After this, xargs command will catch the lines outputed by the find command but filtered with sed and executes a cp command and directs it to /media directory.

find options:
-name = specifies the name to find

sed options:
-r = will do an extended regular expression

xargs options:
-t = print the command line (which is the cp) in the standard error output before executing the command
-I = replaces the brackets '{}' with the input from find and sed (or the initial-arguments with names read from standard input) and it's separator is the new line

1 comment:

Nehemiah said...

Thanks man !!! That worked well !!!