首页 > 解决方案 > 带有正则表达式的 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],包括我不想删除的文件。

标签: regexbashxargsrm

解决方案


正如@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 {} +


推荐阅读