删除多个文件的命令

Command to delete multiple files

我是编程的新学生,我被困在一个问题上,它是: 输入命令删除文件名以 logtest 开头的所有文件,但 logtest 本身除外(删除所有以 'logtest' 开头且后跟一个或多个字符的文件。)

rm -r -- !(logtest.*) 没有成功。

你的做法并没有完全错误。由于您正在处理 STDIN 的列表并且 rm 需要参数,因此您需要使用 xargs.

另一件事是当你 grep 一个文件名时你必须转义一个点。你的命令应该看起来……像这样。:

ls | grep -v 'logtest\.' | grep 'logtest' | xargs rm 

请注意,您执行了两次 grep。第一个排除你的 logtest.* 本身,第二个用 logtest.

包含你剩余的文件

像这样的东西应该可以工作:

for file in *; do
    # Ensure that the file is a file and not a directory.
    [ -f "$file" ] && {
        if printf "%s" "$file" | grep "^logtest." > /dev/null; then
            rm -f "$file"
        fi
    }
done

这不会解析 ls 的输出,确保该文件实际上是一个文件并且也可以使用空格(名称如“logtest”)。

'^' 表示匹配字符串的开头,这样就不会匹配“test_logtest”之类的东西,而'.'最后确保匹配后有字符。 > /dev/null 代表将 grep 命令的输出重定向到 /dev/null(发送到那里的所有内容都被丢弃),这基本上隐藏了 grep 匹配项,不显示在输出中。

enter a command to delete all files that have filenames starting with logtest, except logtest itself (delete all files starting with 'logtest' followed by one or more characters.)

rm logtest?*

? 匹配单个字符。 * 匹配 0 个或多个。组合它们以匹配 1 个或多个字符。

或者如果你的意思是所有这样的文件,而不仅仅是特定目录中的文件...

find / -name "logtest?*" -exec rm \{\} +