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/

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/
| 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 '16 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 
| improve this answer | |
  • Hi terdon, how to move folders into new directory based on their match in the csv file? Could you please help me with this [unix.stackexchange.com/questions/433068/… Thank you !! – stack_learner Mar 26 '18 at 9:59
  • @user3351523 your question has been closed. Asking random people for help won't change that. Instead, edit the question, and explain how the solutions in the duplicate didn't help you. If something "didn't work", explain how it failed. The solutions should work for you, so you need to explain what happens when you try them. – terdon Mar 26 '18 at 11:23
  • I did that. you can have a look. – stack_learner Mar 26 '18 at 11:30
  • @user3351523 you haven't explained why the solutions of the dupe fail for you. And you haven't explained how the answers you have gotten fail. You might just need to use cp -Hr but I don't know if OSX cp supports that. – terdon Mar 26 '18 at 11:41
for i in $(cat /tmp/list.txt); do mv "$i" /app/dest/; done
| 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
| improve this answer | |
  • 1
    -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)

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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