Linux can't delete files

前端 未结 3 527
既然无缘
既然无缘 2021-01-22 06:49

I have a problem with removing files when I find them. Task : must find files with spaces and remove them

my try :)

rm $(find -L /root | grep -i \' \')
<         


        
相关标签:
3条回答
  • 2021-01-22 07:17

    You can specify an -exec argument to the find command to run a command with the resulting file as an argument. In your case, the following command will do what you want.

    -type f will print only files. If you want only directories then use -type d. If you use neither of these then it will print both files and directories.

    As this is a delete operation, first run the command and see if it's printing the files you want.

    find /root -type f -name '* *'
    

    Then if everything is okay, run this to delete them.

    find /root -type f -name '* *' -exec rm {} \;
    
    0 讨论(0)
  • 2021-01-22 07:20

    Why not thus:

    find /root -type f -name '* *' -exec rm -f {} ';'
    
    0 讨论(0)
  • 2021-01-22 07:37

    I'm guessing you are finding files with spaces in, or quotes. Try this:

    find /test/path -print0 | xargs -0 rm
    

    What this will do is send the filenames to stdout separate by NULL bytes, which xargs will take as delimiters. This allow spaces, quotes and other such fun in the output.

    Now, if you are removing directories, rm is not going to work. So you might want to add a -type f to the above.

    Note that gnu find itself has a -delete operator which will delete files for you, but you wanted to know why. Hence a shorter route would be:

    find /test/path -delete
    

    This will deal with directories too if you do not add -type f. It will also handle deleting the deepest things first (think about why this is needed).

    0 讨论(0)
提交回复
热议问题