11

I have listed the names of the files which are to be deleted into a file. How can I pass the file to rm command so that it should delete them one by one.

10

If you have one file per line, one way to do it is:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

The file list is given as input to the tr command which changes the file separator from linefeed to the null byte and the xargs command reads files separated by null bytes on input and launches the rm command with the files appended as arguments.

  • 1
    I'd also suggest using rm -- instead of just rm, so that filenames which may start with dash would not be treated as rm parameters. – artyom Feb 21 '13 at 7:13
  • It didn't work buddy........ tr: extra operand monu.txt' Try tr --help' for more information. rm: missing operand Try `rm --help' for more information. ........This is all wat i am able to see – monu Feb 21 '13 at 7:24
  • 1
    Did you perhaps miss the < before the filename? – Jonas Berlin Feb 21 '13 at 7:24
  • I improved the xargs command a bit also - added -- according to @artyom 's suggestion and added -r to make sure it doesn't run rm if there are no files to remove. – Jonas Berlin Feb 21 '13 at 7:26
5

The above answer is fine in that it goes to great lengths to handle filesnames with spaces and "strange caracters". But the simplest way, if the file names are sane, is just (warning, bashism!):

rm $(< /the/file/with/names)

For regular shell:

rm `cat /the/file/with/names`

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.