regex - 带有正则表达式的 xargs rm -r 返回“没有这样的目录”
问题描述
我有一个包含几个子目录b1_3, b1_4
等的文件夹。在这些子目录中我有一些文件和其他子目录,并且这些子目录的名称遵循一个模式alpha[digits]_etc
,因此
lfppfs@lfppfs:~$ ls -l Desktop/shape/PD_sigma4/b*
Desktop/shape/PD_sigma4/b1_3:
total 364
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:07 alpha0.0_b150_t10000_s5_qmat0.01
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:07 alpha0.0_b150_t10000_s5_qmat0.1
-rwxr-xr-x 1 lfppfs lfppfs 1143 ago 4 09:07 alpha0.sh
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:07 alpha10.0_b150_t10000_s5_qmat0.01
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:07 alpha10.0_b150_t10000_s5_qmat0.1
-rwxr-xr-x 1 lfppfs lfppfs 1144 ago 4 09:07 alpha10.sh
-rwxr-xr-x 1 lfppfs lfppfs 7 ago 4 09:07 forbiden-sites.in
-rwxr-xr-x 1 lfppfs lfppfs 984 ago 4 09:07 input0alpha0.in
-rwxr-xr-x 1 lfppfs lfppfs 992 ago 4 09:07 input0alpha10.in
Desktop/shape/PD_sigma4/b1_4:
total 364
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:09 alpha0.0_b150_t10000_s5_qmat0.01
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:07 alpha0.0_b150_t10000_s5_qmat0.1
-rwxr-xr-x 1 lfppfs lfppfs 1143 ago 4 09:07 alpha0.sh
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:07 alpha10.0_b150_t10000_s5_qmat0.01
drwxr-xr-x 2 lfppfs lfppfs 12288 ago 4 09:07 alpha10.0_b150_t10000_s5_qmat0.1
-rwxr-xr-x 1 lfppfs lfppfs 1144 ago 4 09:07 alpha10.sh
-rwxr-xr-x 1 lfppfs lfppfs 7 ago 4 09:07 forbiden-sites.in
-rwxr-xr-x 1 lfppfs lfppfs 984 ago 4 09:07 input0alpha0.in
-rwxr-xr-x 1 lfppfs lfppfs 992 ago 4 09:07 input0alpha10.in
我只想删除alpha[digits]_etc
所有目录中的子目录b1_[digits]
(请注意,还有一些alpha[digits].[digits].sh
我不想删除的文件)。我用几个命令试试运气,包括
ls Desktop/shape/PD_sigma4/b* | grep -P "alpha\d*0\.0" | xargs echo rm -r | bash
但是外壳返回
rm: cannot remove 'alpha0.0_b150_t10000_s5_qmat0.01': No such file or directory
rm: cannot remove 'alpha0.0_b150_t10000_s5_qmat0.1': No such file or directory
etc
不知道我做错了什么。希望我的问题很清楚。
编辑
我也尝试过使用find Desktop/shape/PD_sigma4 -regextype posix-egrep -regex "b\d_\d\/alpha\d*0\.0" -delete
,但后来 shell 返回了里面的所有文件b1_[digits]
,包括我不想删除的文件。
解决方案
正如@AdemÖztaş 在评论中指出的那样:
find ~/Desktop/shape/PD_sigma4/b1_* -regextype posix-egrep -type d -name "alpha[0-9]*" -exec rm -r {} +
-type d
仅匹配目录,因此不匹配alpha[digits].[digits].sh
文件。-delete
操作不会删除非空目录,这就是我需要的原因-exec rm -r {} +
推荐阅读
- python - 正则表达式匹配具有小变化的重复模式
- swiftui - 如何删除嵌套导航栏?
- java - 创建两个 POJO 的差异对象
- python-3.x - 调试在 Docker 容器中运行的 Azure 函数
- typescript - 具有共享组件的 node_module 存储库的声明类型
- java - 从字母表中选择一个字母并在上面加上引号
- java - 类路径的 Eclipse java 问题
- javascript - 删除递归数据结构中给定节点上方的所有内容
- c# - C# windows 窗体应用程序 Word 互操作适用于 Windows 7 但不适用于 Windows 10
- flutter - 如何在 Flutter 中的图像上动态绘制矩形?