我有一个包含大量文件的目录。我想在 Solaris 中删除除 file.txt 之外的所有文件。我该怎么做呢?
我尝试做 --> rm !(UsageRequest.csv)
但它没有奏效。 Solaris 抛出错误“Unexpected Token - '('”。
答案1
!(UsageRequest.csv)
是一个ksh
通配符,它仅适用于ksh
(也适用于zsh -o kshglob
or bash -O extglob
,但这些 shell 在 Solaris 上默认不提供)。
因此,您需要在ksh
.请注意,Solaris 11 的 Solaris现在基于 ksh93,因此它可以在那里工作,但您仍然不应该在脚本/bin/sh
中使用那些非标准扩展。sh
在 Solaris 10 及更早版本上,/bin/sh
是 Bourne shell。该标准sh
可以在 中的其他地方找到/usr/xpg4/bin/sh
。那sh
是基于ksh88
.再次!(x)
可以在那里工作,但不应该在那里使用。
所以,使用:
#! /usr/bin/ksh -
rm -- !(UsageRequest.csv)
或者:
#! /usr/xpg4/bin/sh -
ksh -c 'rm -- !(UsageRequest.csv)'
POSIX(或 Bourne)glob 没有否定运算符。您需要做一些繁琐的事情,例如:
set -- *
for i do
[ UsageRequest.csv = "$i" ] || set -- "$@" "$i"
shift
done
rm -- "$@"
或者你可以使用find
:
find . ! -name . -prune ! -name '.*' ! -name 'UsageRequest.csv' \
-exec rm -f {} +