shell 使用rm删除一个文件夹中的多个文件夹失败,3个文件夹除外

zbwhf8kr  于 2023-02-09  发布在  Shell
关注(0)|答案(1)|浏览(290)

我试图删除文件夹内的所有文件夹,除了2 3使用rm。但是,命令不工作,下面的错误

尝试使用转义符,但无法删除文件夹。

有什么办法吗?
编辑1

在括号后使用双引号是无效的
编辑2
使用shopt也不起作用

bfrts1fy

bfrts1fy1#

    • 注意**:首先需要为extglob设置Shell选项。在将脚本添加到. sh文件之前,我在运行脚本时遇到了同样的问题。下面的链接是Unix堆栈交换中的引用。

https://unix.stackexchange.com/questions/153862/remove-all-files-directories-except-for-one-file

    • 完整工作脚本:* test.sh*
shopt -s extglob;
cd Test;
rm -rfi !("atest3"|"atest2")

以下命令将强制(f)、递归(r)和交互(i)删除(rm)所有文件或文件夹,但文件或文件夹字符串('arg1')的(! bang operator**)除外|'arg2'|...)列为管道(|* *)参数。
如果嵌套的文件和文件夹作为参数传递,但父文件和文件夹不是,则该文件或文件夹将被删除:

rm -rfi !('atest2'|'atest3')

Example of using rm with -rf flags and bang operator to prevent passed string arguments being deleted
我将下面的命令作为我之前回答的示例。
此命令将创建多个文件夹:

mkdir {test1,atest2,atest3,atest4}

此命令将删除以下文件夹:

rm -rfi {test1,atest2,atest3,atest4}

Example of mkdir with args and rm -rfi with args shell command

相关问题