如何删除一个目录中除部分文件外的所有文件?
我需要删除一个目录中的所有文件,但要排除其中的一些文件。例如,在一个有a b c ... z
文件的目录中,我需要删除除了u
和p
以外的所有文件。有什么简单的方法可以做到这一点吗?
在bash中输入rm
以外的所有u,p
即可。
rm !(u|p)
这需要设置以下选项。
shopt -s extglob
查看更多。 glob - Greg’s Wiki 。
在这种情况下,我的做法是输入
rm *
然后我按Ctrl+X,*将*
扩展为所有可见的文件名。
然后我就可以从列表中删除我喜欢保留的两个文件,最后执行命令行。
您可以使用 find
find . ! -name u ! -name p -maxdepth 1 -type f -delete
!
否定下一个表达式 -name
指定一个文件名 -maxdepth 1
将使 find 只处理指定的目录 (默认情况下 find
会遍历目录) -type f
将只处理文件 (而不是例如目录) -delete
将处理文件 (而不是例如目录) -print
将处理文件 (而不是例如目录) -delete
将处理文件 (而不是例如目录) 然后你可以通过查看find的man页面
更新
很简单:
mv
将你想要的文件放在上层目录中,rm
目录,然后mv
他们回来。
find . -maxdepth 1 ! -name "u" ! -name "p" -type f -exec rm -rf {} \;
在unix中,这将删除除u和p以外的所有文件。
这是另一个变体。你可以输入:
rm -i *
或者:
rm --interactive *
所以rm
会要求你确认删除每个文件。
使用:
find . -type f ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
find . -type d ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
来删除包括目录在内的所有文件,但u、p和.ext文件除外。
一个简单的很难搞乱的方法:比如说你想删除除了*.pdf以外的所有内容。
mkdir tmp
mv *.pdf tmp
rm *
mv tmp/* .
rm -r tmp