Solarisのディレクトリから1つのファイルを除くすべてのファイルを削除する方法

Solarisのディレクトリから1つのファイルを除くすべてのファイルを削除する方法

多くのファイルを含むディレクトリがあります。 Solarisでfile.txtを除くすべてのファイルを削除したいと思います。どうすればいいですか?

私は --> rm !(UsageRequest.csv) を試しました。

しかし、それはうまくいきませんでした。 Solarisで「予期しないトークン - '('」エラーが発生します。

答え1

!(UsageRequest.csv)kshはorでのみ動作するワイルドカードです(orkshでも動作しますが、このシェルはSolarisではデフォルトでは提供しません)。zsh -o kshglobbash -O extglob

したがって、これをksh/bin/shsh

Solaris 10 以下では/bin/shBourne シェルです。標準は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 {} +

関連情報