모든 C 프로그램이 포함된 디렉토리가 있습니다. 또한 코드를 확인할 수 있도록 생성 시 컴파일했습니다. 프로그램이 거의 100개에 달합니다. 그래서 파일이 ".c"로 끝나는지 확인하는 BASH 스크립트가 필요합니다. 그렇다면 아무 작업도 수행하지 않고, 그렇지 않으면 삭제합니다. 내 파일 이름 중 하나가 "Hello.c"라고 가정하고 컴파일할 때 바이너리 이름을 "Hello"로 지정합니다. 누군가 나를 위해 이 스크립트를 만들어 줄 수 있나요?
답변1
-delete
(첫 번째 테스트) 플래그를 사용할 수 있습니다find
-ls
find -not -name "*.c" -delete
을 사용하지 않고 find
현재 디렉터리의 파일만 사용하려는 경우 다음을 수행할 수 있습니다.
rm !(*.c)
올바른 와일드카드가 bash
설정 되어 있는지 확인하십시오 . shopt -s extglob
또한 globstar( )를 설정하면 shopt -s globstar
재귀적으로 작업할 수 있습니다( bash
버전 4+의 경우).
rm **/!(*.c)
답변2
find
나는 항상 이 경우를 선호합니다. 특별한 파일 이름에 대해 걱정할 필요가 없으며 다양한 파일 형식을 처리할 수 있습니다. 파일만 삭제하려면 -type f
옵션에 이 항목을 추가해야 합니다. 그래서 제가 가장 좋아하는 솔루션은 다음과 같습니다.
find -not -name "*.c" -type f -delete
그래도 조심하세요. 이와 같은 명령을 테스트하는 것은 항상 좋은 생각입니다.
답변3
ksh 확장 활성화와일드카드 패턴명령을 사용하십시오 shopt -s extglob
( 에 넣을 수 있음 ~/.bashrc
). 그런 다음 패턴은 !(*.c)
일치하는 파일을 제외하고 현재 디렉터리의 모든 파일과 일치합니다 *.c
.
rm !(*.c)
.txt
이는 파일, .h
파일 등을 삭제하므로 매우 위험합니다 . 덜 과감한 명령은 다음과 같습니다.
rm !(*.*) *.o
그래도 등은 삭제됩니다 README
. Makefile
아마도 실행 파일을 삭제해야 할 것입니다.
find . -type d -prune -o -type f -perm -100 -exec rm {} +
지원하는 경우 더 짧게 find
:
find . -maxdepth 1 -type f -perm -100 -delete