![Solaris의 디렉토리에서 하나의 파일을 제외한 모든 파일을 삭제하는 방법](https://linux55.com/image/93465/Solaris%EC%9D%98%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%EC%84%9C%20%ED%95%98%EB%82%98%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%A0%9C%EC%99%B8%ED%95%9C%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
많은 파일이 포함된 디렉토리가 있습니다. 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 {} +