많은 파일이 포함된 디렉토리가 있습니다. Solaris에서 file.txt를 제외한 모든 파일을 삭제하고 싶습니다. 어떻게 해야 하나요?
나는 --> rm !(UsageRequest.csv) 을 시도했습니다.
그러나 그것은 작동하지 않았습니다. Solaris에서 "예기치 않은 토큰 - '('" 오류가 발생합니다.
답변1
!(UsageRequest.csv)
ksh
는 or 에서만 작동하는 와일드카드 입니다 ( or ksh
에서도 작동 하지만 이 쉘은 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 {} +