我想删除目录中的所有文件,而只保留一些指定的文件,它们在名称上没有任何共同之处。我该如何实现?
例如,我要保留的文件名是:
file_1.png
,another_file.jpg
,some_music.mp3
我想删除目录中的所有文件,而只保留一些指定的文件,它们在名称上没有任何共同之处。我该如何实现?
例如,我要保留的文件名是:
file_1.png
,another_file.jpg
,some_music.mp3
Answers:
创建一个子目录tmp
,将所有要保留的所有文件移动到该目录,rm -f *
然后执行。那不会影响tmp
目录。
之后,只需执行以下操作:
mv tmp/* .
rmdir tmp
(假设您没有移动的文件都以点开头)。
在少数情况下,使用鼠标和像Nautilus这样的文件浏览器是有意义的,您可以在其中实际Ctrl单击-单击要保留的几个文件,然后使用菜单:Edit -> Invert Selection
获取其他文件,然后删除那些文件。
ls
来查看是否没有丢失要保留的任何文件。
将要保留的文件名添加到文本文件中,每行一个。该文件不应位于目录中,或者也应添加其名称。
如果目录名是foo,文件名是bar,请执行以下操作。
find foo -type f -print0|grep -vzZ -f bar|xargs -0 rm
这将执行以下操作:
find -type f
在foo及其子目录中搜索所有文件的名称,并将它们打印到STDOUT。通过选项,-print0
它用NUL字节分隔文件名。grep -v -f bar
排除与bar中的一行匹配的所有文件名。使用option时-z
,它将其输入视为由NUL字节分隔的一组行,使用option时-Z
,其输出将使用NUL字节来倾斜。xargs rm
rm
反复调用以删除文件。使用option时-0
,它将其输入视为由NUL字节分隔的一组行。这适用于包含空格的文件名。
find
我宁愿这样做find . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -vi {} +
shopt -u extglob
)可能会很有用。