删除多个文件的命令
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 \{\} +
我是编程的新学生,我被困在一个问题上,它是: 输入命令删除文件名以 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 \{\} +