디렉토리의 모든 zip 파일을 나열하는 방법은 무엇입니까? [복사]

디렉토리의 모든 zip 파일을 나열하는 방법은 무엇입니까? [복사]

우분투16.04

나는 이것을 시도했습니다 :

for file in $source/*.zip
do
        echo $file
done

디렉토리에 파일이 포함되어 있으면 zip작동합니다 . 모두 인쇄됩니다. 그러나 그렇지 않은 경우 에는 s 만 포함되어 $source/*.zip있으면 인쇄됩니다.source=/home/usrname/dirzip

/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' "$@"

관련 정보