Solaris의 디렉토리에서 하나의 파일을 제외한 모든 파일을 삭제하는 방법

Solaris의 디렉토리에서 하나의 파일을 제외한 모든 파일을 삭제하는 방법

많은 파일이 포함된 디렉토리가 있습니다. Solaris에서 file.txt를 제외한 모든 파일을 삭제하고 싶습니다. 어떻게 해야 하나요?

나는 --> rm !(UsageRequest.csv) 을 시도했습니다.

그러나 그것은 작동하지 않았습니다. Solaris에서 "예기치 않은 토큰 - '('" 오류가 발생합니다.

답변1

!(UsageRequest.csv)ksh는 or 에서만 작동하는 와일드카드 입니다 ( or ksh에서도 작동 하지만 이 쉘은 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 {} +

관련 정보