linux - Bash for 循环从多个目录中删除不带后缀的文件
问题描述
我有 5000 个需要清理的目录。我想运行一个脚本来删除没有后缀的文件并保留带有任何后缀的文件。我知道所有没有后缀的文件都可以安全地删除,因为这些目录包含各种类型的图像。我试过这个:
for i in $(ls -d */)
do
rm $i !(*.*)
done
我收到语法错误
syntax error near unexpected token `('
` rm $i !(*.*)'
我真的不想重复这个过程 5000 次。任何帮助将不胜感激!
解决方案
请不要遍历ls
. 这是非常危险的,容易出错的,作者强烈反对。此外,如果您只想查找文件并删除它们,该find
实用程序将更有效地执行此操作。
最基本的版本是:
$ find . -mindepth 2 -type f ! -name "*.*" -delete
这是有效的,因为您不会启动 5000 个进程rm
(每个目录一个)。事实上,这只是一个过程。find
将调用unlink()
删除文件,因为它找到它。
推荐阅读
- javascript - javascript可以判断元素是否在其他元素之上吗?
- c# - 动态对象中的 C# 异常 System.ArgumentException
- python - Python按值将列表元素分组为元组
- caching - 不同级别的缓存是否在同一频域中运行?
- javascript - 带有单选按钮的 Javascript this.form.submit()
- python - RMarkdown:Python 代码块上的 knitr::purl()?
- ruby-on-rails - Rails 5、simple_form_for、RSpec 和 Capybara - click_button 不适用于我的表单
- linux - 了解 tmpfs 大小
- docker - docker中的Webpack应用需要环境变量才能构建
- css - CSS 模块和汇总 - 生成具有相同哈希值的单独 CSS 文件(“主题”)