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
그런 다음 일치하는 이름의 일반 파일에 대한 첫 번째 일반 파일 또는 심볼릭 링크를 찾기 시작합니다(코드는 *.csv
glob가능한디렉토리 이름 등으로 확장됩니다.) 일반 파일이나 파일에 대한 심볼릭 링크가 발견되면 파일 이름이 listing.txt
.
zsh
셸 에서 :
mv -- *.csv(-.[1]) listing.txt
이는 와일드카드 패턴에 와일드카드 수정자를 사용하여 *.csv
패턴과 일치하는 첫 번째 일반 파일이나 심볼릭 링크를 반환합니다.