CSV 파일 찾기 및 이름 바꾸기에 대한 스크립트 질문

CSV 파일 찾기 및 이름 바꾸기에 대한 스크립트 질문

CSV 파일이 존재하는지 먼저 테스트하는 스크립트를 작성하려고 합니다. 발견되면 이름을 Listing.txt로 바꿉니다.

이것이 내가 가지고 있는 것이지만 작동하지 않습니다.

if [ -f "*.csv" ];
   then
   cp *.csv listing.txt
fi

답변1

*.csv기존 코드는 이름이 문자 그대로인 파일이 존재하는지 여부를 테스트합니다. 그것이 작동하지 않는 이유입니다. 이는 *큰따옴표 안에 넣어서 수행됩니다 .

[ -f *.csv ]이 패턴과 일치하는 파일이 여러 개 있으면 를 사용하면 예상대로 작동하지 않습니다. 일치하는 파일이 여러 개인 경우 디렉터리 이름이 아니면 *.csv명령 cp이 제대로 작동하지 않습니다 .listing.txt

이름 바꾸기첫 번째*.cvs파일 이름 와일드카드 패턴과 일치하는 현재 디렉터리의 파일에 대해 다음을 수행합니다.

#!/bin/sh

set -- *.csv

while [ "$#" -gt 0 ] && [ ! -f "$1" ]; do
    shift
done

if [ -f "$1" ]; then
    mv -- "$1" listing.txt
fi

이는 먼저 위치 인수 등을 $1현재 디렉토리에서 $2일치하는 모든 이름으로 설정합니다. *.csv그런 다음 일치하는 이름의 일반 파일에 대한 첫 번째 일반 파일 또는 심볼릭 링크를 찾기 시작합니다(코드는 *.csvglob가능한디렉토리 이름 등으로 확장됩니다.) 일반 파일이나 파일에 대한 심볼릭 링크가 발견되면 파일 이름이 listing.txt.

zsh셸 에서 :

mv -- *.csv(-.[1]) listing.txt

이는 와일드카드 패턴에 와일드카드 수정자를 사용하여 *.csv패턴과 일치하는 첫 번째 일반 파일이나 심볼릭 링크를 반환합니다.

관련 정보