ディレクトリ内のすべてのzipファイルを一覧表示するには? [コピー]

ディレクトリ内のすべてのzipファイルを一覧表示するには? [コピー]

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

関連情報