如何删除快捷方式内各类文件及指定格式文件,仅保留目录?
如何仅删除指定文件并保留目录?
嘿,我来帮你搞定这个问题!要实现删除快捷方式文件、.md/.txt/.py等格式文件,同时只保留目录的需求,有几个靠谱的方法,我给你拆解清楚:
方法一:用find命令(最安全通用的选择)
find是处理这类文件操作的黄金工具,它能精确匹配文件类型和后缀,还能避免特殊文件名(比如带空格、换行符)的坑。
场景1:删除指定类型的文件(含快捷方式)
如果你只想删除快捷方式(比如Windows的.lnk或Linux的.desktop)和.md/.txt/.py文件,且只处理当前目录(不递归子目录),可以先预览要删除的文件,确认无误后再执行删除:
# 先预览匹配的文件 find . -maxdepth 1 -type f \( -name "*.md" -o -name "*.txt" -o -name "*.py" -o -name "*.lnk" -o -name "*.desktop" \) -print
确认后执行删除:
find . -maxdepth 1 -type f \( -name "*.md" -o -name "*.txt" -o -name "*.py" -o -name "*.lnk" -o -name "*.desktop" \) -delete
参数解释:
-maxdepth 1:限制只搜索当前目录,不深入子目录-type f:只匹配普通文件(自动排除目录、设备文件等)\( ... \):把多个匹配条件分组,-o表示“或”关系-name "xxx":匹配对应后缀的文件,可根据你的系统调整快捷方式的后缀
场景2:删除所有普通文件(只留目录)
如果你想删除当前目录下所有普通文件(不管后缀),只保留目录,命令更简单:
# 先预览 find . -maxdepth 1 -type f -print # 确认后删除 find . -maxdepth 1 -type f -delete
方法二:用rm结合ls(仅适用于无特殊字符的文件名)
如果你的文件名都是简单的(没有空格、特殊符号),可以用ls筛选后直接删除:
删除指定类型文件
rm *.md *.txt *.py *.lnk *.desktop
删除所有普通文件
利用ls -p会给目录添加/的特性,过滤掉目录后删除:
rm $(ls -p | grep -v /)
⚠️ 注意:如果文件名包含空格、换行符或特殊字符,这种方法会出错,所以优先用find。
关于你提到的ls测试命令
你提到的两个ls用法可以帮你快速区分文件和目录:
ls -d .*/:只会显示目录本身,不会展开目录内容,方便你确认目录列表ls -f:关闭排序,按磁盘存储顺序显示文件,同时会给目录加/、可执行文件加*、链接文件加@,能一眼区分文件和目录:
ls -f
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

