我最近需要删除父目录中约 40 个目录中的所有文件,但不删除目录本身。我最终手动完成了此操作,但有没有更有效的方法?即,是否有可以执行此操作的 Linux 命令?
为了更清楚地了解我的意思:
HomeDirectoryName --> subdirectoryName --> 4 个模拟信息文件
我有上述路径,但有 40 个子目录,每个子目录都有 4 个模拟文件。我需要删除所有模拟信息文件,而不删除“subdirectoryName”目录。
这可能不可行,因为我到处搜索了大约一个小时才最终决定手动完成。
答案1
该find
命令非常简单 - 只需用于-type f
查找文件而不是目录
find /path/to/parent/directory -type f -delete
默认情况下,find
递归到子目录,因此将从该点向下找到树中的所有文件。
答案2
从父目录运行
find -type f -exec rm {} \;
分别删除每个文件,或者
find -type f -exec rm {} +
rm
一次将多个文件放入队列。
对于 Python 爱好者来说,这里是另一种解决方案:
python -c 'import os;[os.unlink(os.path.join(r,f)) for r,d,fs in os.walk(".") for f in fs]'
答案3
从父目录
rm */*
将删除 160 个模拟信息文件,但不删除包含这些文件的 40 个目录。
(在这种情况下这并不重要,但在将来知道rm
除非您明确要求使用-r
标志,否则永远不会删除目录可能会很有用。)