Unix-删除不包含PATTERN的文件和文件夹
最近,我面临着删除目录中所有文件/文件夹的任务,但不包括与特定模式匹配的文件/文件夹。因此,我编写了单行的unix命令来完成工作。只能是一行吗?我想不是,但是那样肯定更酷! 虽然问题很简单,但我对解决方案的复杂程度感到有些惊讶。这是我使用的命令;注意:这是一个糟糕的解决方案,因为它不处理包含换行符的文件名(在我的情况下这无关紧要)。 ls | grep -v PATTERN | xargs -n1 -IREPLACE rm -rf REPLACE 我没有使用“ find”命令,因为我不想递归到与PATTERN匹配的文件夹中。例如,考虑以下文件结构: file_foo.txt first_dir | +--> contents +--> ... foo_dir | +--> anotherfile.txt +--> morefiles.log foo_file.txt somefile.txt 使用模式“ foo”只能删除“ first_dir”(当然是它的内容)和“ somefile.txt”(而不是 “ anotherfile.txt”或“ morefiles.log”)。 问题,是否有更好(更优雅,更正确)的方法来实现这一目标? 编辑: 最近引起我注意,“查找”可能是一个更好的选择: find * -maxdepth 0 ! -name PATTERN -print0 | …