删除文件并使用 find [duplicate] 排除一些文件

删除文件并使用 find [duplicate] 排除一些文件

这是一个老问题了。我知道如何删除文件并排除一些文件,如下所示:

rm `find ~/temporary/Test\ 1 -mindepth 1 -maxdepth 1|grep -v 'A'`

但问题是文件夹“Test 1”的名称中包含空格,查找的结果是

/home/owner/temporary/Test 1/B

它产生rm错误,我该如何修复它?

答案1

此解决方案甚至适用于空格,但需要一些输入:

find -mindepth 1 -maxdepth 1 ! -name "peter" ! -name "paul & mary" -exec rm {} \+

或者使用较新的find版本(findutils >= 4.2.3):

find -mindepth 1 -maxdepth 1 ! -name "peter" ! -name "paul & mary" -delete

答案2

以下是我的看法:

$ mkdir -p temp\ 1/sub\ 1
$ touch temp\ 1/{one,two,three} temp\ 1/sub\ 1/{one,two,three}
$ tree temp\ 1/
temp\ 1/
├── one
├── sub\ 1
│   ├── one
│   ├── three
│   └── two
├── three
└── two

1 directory, 6 files
$ find temp\ 1/ -maxdepth 1 -mindepth 1 -type f ! -regex '.*/.*o.*' -exec rm -v {} \;
removed ‘temp 1/three’

这里的关键概念是:

  1. 带否定的过滤-regex器(!选项之前)和模式应用于整个路径找到的文件。
  2. -exec用正确引用的路径替换标记的命令。{}记得添加 来\;标记命令行的结尾。

相关内容