这是一个老问题了。我知道如何删除文件并排除一些文件,如下所示:
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’
这里的关键概念是:
- 带否定的过滤
-regex
器(!
选项之前)和模式应用于整个路径找到的文件。 -exec
用正确引用的路径替换标记的命令。{}
记得添加 来\;
标记命令行的结尾。