如何在Solaris中删除目录中除一个文件之外的所有文件

如何在Solaris中删除目录中除一个文件之外的所有文件

我有一个包含大量文件的目录。我想在 Solaris 中删除除 file.txt 之外的所有文件。我该怎么做呢?

我尝试做 --> rm !(UsageRequest.csv)

但它没有奏效。 Solaris 抛出错误“Unexpected Token - '('”。

答案1

!(UsageRequest.csv)是一个ksh通配符,它​​仅适用于ksh(也适用于zsh -o kshglobor 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 {} +

相关内容