우분투16.04
나는 이것을 시도했습니다 :
for file in $source/*.zip
do
echo $file
done
디렉토리에 파일이 포함되어 있으면 zip
작동합니다 . 모두 인쇄됩니다. 그러나 그렇지 않은 경우 에는 s 만 포함되어 $source/*.zip
있으면 인쇄됩니다.source=/home/usrname/dir
zip
/home/usrname/dir/*.zip
이런 경우 아무것도 인쇄되지 않게 하는 방법이 있나요?
답변1
당신이 사용할 수있는:
find "$source" -name "*.zip"
파이프로 연결매개변수 또는 다음을 사용하십시오:
shopt -s dotglob
for file in "${source}"/*.zip
do
if [ -f "${file}" ]; then
printf '%s\n' "$file"
fi
done
zip
일반 파일이거나 일반 파일에 대한 심볼릭 링크인 파일 만 인쇄합니다 .
답변2
bash
shopt -s nullglob dotglob
files=("$dir"/*.zip)
((${#files[@])) && printf '%s\n' "${files[@]}"
shopt -u nullglob dotglob # if needed
zsh
files=($dir/*.zip(ND))
(($#files)) && printf '%s\n' $files
fish
set files $dir/.*.zip $dir/*.zip
if count $files > /dev/null
printf '%s\n' $files
end
(여기에 제공된 다른 솔루션과 달리 이름이 지정된 파일이 생략되어 있습니다 .zip
.)
ksh93
FIGNORE='@(.|..)'
files=(~(N)"$dir"/*.zip)
((${#files[@])) && printf '%s\n' "${files[@]}"
unset FIGNORE # if needed
yash
set -o dot-glob -o null-glop
files=("$dir"/*.zip)
[ "${files[#]}" -gt 0 ] && printf '%s\n' "$files"
set +o got-glob +o null-glob # if needed
POSIX적으로
export LC_ALL=C
set -- "$dir"/[*].zip "$dir"/*.zip
case ${1##*/}${2##*/} in
'[*].zip*.zip') shift 2
esac
set -- "$dir"/.[*].zip "$dir"/.*.zip "$@"
case ${1##*/}${2##*/} in
'.[*].zip.*.zip') shift 2
esac
[ "$#" -gt 0 ] && printf '%s\n' "$@"