如果我有一个文件夹,我可以写什么脚本来删除名字中没有某些短语的文件?
我的文件夹包含
oneApple.zip
twoApples.zip
threeApples.zip
fourApples.zip
我想删除名称中文件名不包含“one”或“three”的文件。
执行脚本后,该文件夹只包含:
oneApple.zip
threeApples.zip
答案 0 :(得分:4)
使用启用了extglob
的现代bash,我们可以删除名称不包含one
或three
的文件:
rm !(*one*|*three*)
要试验extglobs的工作原理,只需使用echo:
$ echo !(*one*|*three*)
fourApples.zip twoApples.zip
如果上述方法无法正常运行,那么您的bash已过期或extglob已关闭。打开它:
shopt -s extglob
find . -maxdepth 1 -type f ! -name '*one*' ! -name '*three*' -delete
在运行该命令之前,您可能想要测试它。只需删除-delete
,它就会显示找到的文件:
$ find . -maxdepth 1 -type f ! -name '*one*' ! -name '*three*'
./twoApples.zip
./fourApples.zip
工作原理:
.
这告诉find
查看当前目录。
-maxdepth 1
这告诉find
不要递归到子目录
-type f
这告诉find
我们只需要常规文件。
! -name '*one*'
这会告诉find
排除名称中包含one
的文件。
! -name '*three*'
这会告诉find
排除名称中包含three
的文件。
-delete
这告诉find
删除它找到的文件。