Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a file that contains file names. For example:

/tmp/list.txt (it is with the spaces at the start of each line):


I want, using one line, to move all the files listed in /tmp/list.txt to /app/dest

So it should be something like this:

cat /tmp/list.txt | xargs mv /app/dest/
share|improve this question
up vote 12 down vote accepted

You are just missing the -t option for mv (assuming GNU mv):

cat /tmp/list.txt | xargs mv -t /app/dest/

or shorter (inspired by X Tian's answer):

xargs mv -t /app/dest/ < /tmp/list.txt

the leading (and possible trailing) spaces are removed. Spaces within the filenames will lead to problems.

If you have spaces or tabs or quotes or backslashes in the filenames, assuming GNU xargs you can use:

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/
share|improve this answer
Thank you , for the answer . with this i can make a list of lot of files with [!] in their name , and move to another folder , with the follow : ls | grep -e ".[!]]" | tee 001.txt ; sed 's/^ *//' < 001.txt | xargs -d '\n' mv -t /destinypath/ – inukaze Feb 14 at 16:49

Assuming your file names are relatively sane (no newlines or weird characters):

while read file; do mv "$file" /app/dest/; done < list.txt 

To deal with weird file names (breaks if a file name has a newline):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 
share|improve this answer
for i in $(cat /tmp/list.txt); do mv "$i" /app/dest/; done
share|improve this answer

Pure xargs reading directly from file

xargs -l -i < flist  mv -v {} /app/dst

edit 1 -- after @Anthon 's comment below,

xargs -I{} < flist  mv -v {} /app/dst
share|improve this answer
-i is deprecrated, and it, or it replacement -I imply -l/--max-lines=1. And it causes mv to be executed for each file separately. – Anthon Feb 18 '14 at 16:24
mv `cat /tmp/list.txt` /app/dest/

(spaces at start are ignored)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.