![ディレクトリ内のすべてのzipファイルを一覧表示するには? [コピー]](https://linux33.com/image/98263/%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AEzip%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
Ubuntu16.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' "$@"