多くのファイルを含むディレクトリがあります。 Solarisでfile.txtを除くすべてのファイルを削除したいと思います。どうすればいいですか?
私は --> rm !(UsageRequest.csv) を試しました。
しかし、それはうまくいきませんでした。 Solarisで「予期しないトークン - '('」エラーが発生します。
答え1
!(UsageRequest.csv)
ksh
はorでのみ動作するワイルドカードです(orksh
でも動作しますが、このシェルはSolarisではデフォルトでは提供しません)。zsh -o kshglob
bash -O extglob
したがって、これをksh
。/bin/sh
sh
Solaris 10 以下では/bin/sh
Bourne シェルです。標準は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 {} +