EzDevInfo.com

xargs interview questions

Top xargs frequently asked interview questions

Why does this not work? "ls *.txt | xargs cat > all.txt" (all files into single txt document)

Why does this not work?

ls *.txt | xargs cat > all.txt

(I want to join the contents of all text files into a single 'all.txt' file.) find with -exec should also work, but I would really like to understand the xargs syntax.

Thanks


Source: (StackOverflow)

what is diff bentween xargs with braces and without in linux

I want to know what is the difference between this

ls | xargs rm

ls | xargs -i{} rm {}

Both are working for me


Source: (StackOverflow)

Advertisements

Replacement for xargs -d in osx

In Linux, you can use xargs -d, to quickly run the hostname command against four different servers with sequential names as follows:

echo -n 1,2,3,4 |xargs -d, -I{} ssh root@www{}.example.com hostname

It looks like the OSX xargs command does not support the delimiter parameter. Can you achieve the same result with a differently formatted echo, or through some other command-line utility?


Source: (StackOverflow)

rsync N newest files in a directory

What would be the easiest way to go about rsyncing the n newest files in a directory to a remote server?


Source: (StackOverflow)

xargs with multiple commands

I'm trying to execute a sequence of commands on a list of files one by one. I was wondering if it is possible to use xargs something on the lines of

ls *.txt | xargs -n 1 -I {} cat {} | grep foo > {}.foo

Where

cat {} | grep foo > {}.foo

is the command I want to execute on each file.


Source: (StackOverflow)

How can I avoid the "grep: Argument list too long" error?

I'm using Mac 10.7.5 and on a bash shell. I'm trying to find instances of a string in a group of files but keep getting this error

Daves-MacBook-Pro:folder davea$ find . -name "*" | xargs grep 'state-icons'
xargs: grep: Argument list too long

How can I run the command (or a similar one) to avoid this error?


Source: (StackOverflow)

How to escape file output for compatibilty with 'xargs'?

I have this command:

find $1 | xargs touch

But files with ' characters in their names fail with "xargs: unmatched single quote", and I guess other special characters would cause the same problem.

How can I escape the output so this command works with all filenames?


Source: (StackOverflow)

Trying to understand xargs

The target is not to list temp/run*.* files. The target is to understand why the second command does not work.

First command:

find . \( -name 'temp' \) -print0 | xargs -0 -L 1 -I datafind ls -ltr datafind

list all the files inside temp folders from actual directory

Second command:

find . \( -name 'temp' \) -print0 | xargs -0 -L 1 -I datafind ls -ltr datafind/run*.*

gives cannot access error on every directory that worked with the previous command.

I searched and read man pages and examples but I can not find why the second command does not work. Any clue, please?


Source: (StackOverflow)

How can i move files with xargs in linux

I am trying this and its not working

ls file_* |xargs mv {} temp/

Any ideas


Source: (StackOverflow)

Create symlinks recursively for a whole tree

I am seeking for a command that would re-create a whole tree of files in a different directory. I would prefer to have all symlinks absolute. Can I do that with a find and xargs? ;-)


Source: (StackOverflow)

How can I use two parameters at once with xargs?

I need to convert videos but I don't know where are they, so I need to find them. How can I give the result and an output file name to ffmpeg with xargs ? I already find out that I can construct the two parameter with the command
find . -iname "*.mov" -printf "%p %f\n"

I can't find anything related in the xargs manual. I want something like this:
find . -iname "*.mov" -printf "%p %f\n" | xargs ffmpeg -i {param1} -f flv {param2}

How can I do this ?


Source: (StackOverflow)

How to run sed on over 10 million files in a directory?

I have a directory that has 10144911 files in it. So far I've tried the following:

  • for f in ls; do sed -i -e 's/blah/blee/g' $f; done

Crashed my shell, the ls is in a tilda but i can't figure out how to make one.

  • ls | xargs -0 sed -i -e 's/blah/blee/g'

Too many args for sed

  • find . -name "*.txt" -exec sed -i -e 's/blah/blee/g' {} \;

Couldn't fork any more no more memory

Any other ideas on how to create this kind command? The files don't need to communicate with each other. ls | wc -l seems to work (very slow) so it must be possible.


Source: (StackOverflow)

using xargs to cd to a directory

Feeling like an idiot right now. Why does this not work?

echo "/some/directory/path" | xargs -n1 cd

Source: (StackOverflow)

find: -exec vs xargs (aka Why does "find | xargs basename" break?)

I was trying to find all files of a certain type spread out in subdirectories, and for my purposes I only needed the filename. I tried stripping out the path component via basename, but it did't work with xargs:

$ find . -name '*.deb' -print | xargs basename 
basename: extra operand `./pool/main/a/aalib/libaa1_1.4p5-37+b1_i386.deb'
Try `basename --help' for more information.

I get the same thing (exactly the same error) with either of these variations:

$ find . -name '*.deb' -print0 | xargs -0 basename 
$ find . -name '*.deb' -print | xargs basename {}

This, on the other hand, works as expected:

$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz

This happens on up-to-date Cygwin and Debian 5.0.3. My diagnosis is that xargs is for some reason passing two input lines to basename, but why? What's going on here?


Source: (StackOverflow)

ls -rt (How to list just THE LAST file? e.g. for: | xargs gnome-open)

e.g. directory containing jpeg files: how to easily open just the most recent jpeg in the current directory?


Source: (StackOverflow)