csv 파일 Bash 스크립트를 제외한 모든 항목 삭제

csv 파일 Bash 스크립트를 제외한 모든 항목 삭제

csv 파일을 제외한 폴더의 모든 항목을 삭제하고 싶습니다.

Bash 스크립트를 사용하려고 하는데 다음 오류가 발생합니다.

syntax error near unexpected token `('

이것은 내 스크립트입니다.

 PATH=/tmp/

 run_spark_local
 rm -v !($PATH*.csv)

 cp -r $PATH /data/logs/

나도 시도했다

rm -v !("$PATH*.csv")

답변1

$PATH를 설정하지 마십시오. 환경 변수입니다.

BASH의 경우외부 전역 변수셸 옵션을 활성화하면(많은 Linux 배포판의 기본값) 다음과 같습니다.

rm !(*.csv)

폴더 경로를 사용하면 다음과 같습니다.

rm yourfolder/!(*.csv)

귀하의 환경에서 extglob이 활성화되어 있지 않다고 생각되면 다음을 수행하십시오.

shopt -s extglob

답변2

이 변수를 설정하지 않아야 합니다 PATH. 이는 쉘에서 유효한 명령을 찾는 데 사용되며, 이를 설정하면 스크립트가 명령을 /tmp/완전히 찾지 못하게 됩니다 .rmcp

find다음 명령을 사용하여 원하는 것을 달성 할 수 있습니다 .

find /tmp -not -name '*.csv' -not -path /tmp -exec rm -vr {} \;

참고: 이렇게 하면 /tmp 아래의 모든 하위 디렉터리도 삭제됩니다. 이를 원하지 않으면 다음과 같이 변경해야 합니다.

find /tmp -not -name '*.csv' -type f -exec rm -v {} \;

또한 참고: 이는 여전히 하위 디렉터리로 재귀되며 그 안에 있는 파일을 삭제합니다. 이를 원하지 않으면 다음 maxdepth매개변수를 사용할 수 있습니다.

find /tmp -not -name '*.csv' -maxdepth 1 -type f -exec rm -v {} \;

find ... -exec추가 참고 사항: 나는 온라인에서 찾은 명령이 필요한 작업을 수행하는지 먼저 확인하지 않고는 절대 실행하지 않을 것입니다 . 다음을 실행해야 합니다:

find /tmp -not -name '*.csv' -not -path /tmp

그리고 해당 비트를 추가하기 전에 원하는 파일만 찾는지 확인하십시오 -exec rm -vr {} \;.

답변3

/tmp관심 있는 파일만 복사하고 나머지 파일은 삭제하지 않는 것이 좋습니다.

cp /tmp/*.csv /data/logs/

심지어

mv /tmp/*.csv /data/logs/

보관할 필요가 없다면 /tmp.

이는 관심 있는 모든 파일이 직접 위치에 있다고 가정 합니다 /tmp.rm

/tmp공유 임시 디렉터리이기 때문에 실행 중인 다른 프로세스가 그곳에서 찾을 것으로 예상하는 다른 파일이 포함될 수 있으며, /tmpCSV 파일을 제외한 모든 항목을 삭제하면 바람직하지 않은 결과가 발생할 수 있습니다. 다른 사람들이 언급했듯이, PATH쉘은 이를 사용하여 사용 중인 명령을 찾기 때문에 이를 변경해서는 안 됩니다 .

관련 정보