#!/bin/bash
outbound=/home/user/outbound/
putfile=DATA_FILE_PUT_*.CSV
cd $outbound
filecnt=0
for file in $putfile; do let filecnt=filecnt+1; done
echo "Filecount: " $filecnt
아웃 바운드 디렉토리에 파일이있는 경우이 코드가 잘 작동합니다. 아웃 바운드 경로에 파일을 배치 할 수 있으며 putfile 마스크와 일치하는 한 파일은 예상대로 증가합니다.bash : 변수에 와일드 카드가있는 파일 이름
$outbound
에 파일이없는 동안 문제가 발생합니다. 거기에 파일이없는 경우 $filecnt
은 여전히 1
을 반환하지만 거기에 파일이없는 경우 0
을 반환하도록하고 있습니다.
나는 간단한 것을 놓치고 있습니까?
개행 문자가 포함 된 파일 이름 (일반적으로 발생하지 않지만 견고성 또는 보안 문제 일 수 있음)이있는 경우이 방법이 작동하지 않음에 유의하십시오. – Gilles
@Gilles 귀하의 의견에 감사드립니다. 'ls'는 그런 문제를 일으킬 수 있다고 당신과 동의하십시오. 그러면'wc'가 뒤 따르는'find'를 선호 할 것입니다. 나는'찾기'가 충분히 견고하다고 믿는다.내가 틀렸다면 나를 바로 잡는다. – jkshah
같은 문제이다.'find'는 강력하지만,'wc -l'은 여전히 파일 이름이 아닌 라인을 센다. 당신은'find ... -print0 | tr -dc '\ 0'| wc -c'이지만, bash에서 계산하는 것이 더 쉽습니다. 'find'로부터 세는 것은 원래의 요구 사항에 있지 않은 서브 디렉토리가있을 경우 서브 디렉토리를 가로 질러갑니다. – Gilles