Como listar todos os arquivos zip em um diretório? [duplicado]

0

Ubuntu 16.04

Eu tentei isso:

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

e funciona se o diretório contiver arquivos zip . Imprime todos eles. Mas se isso não acontecer, basta imprimir o $source/*.zip . Quero dizer, se source=/home/usrname/dir , que não contém zip s, for impresso

/home/usrname/dir/*.zip

Existe uma maneira de imprimir nada nesse caso?

    
por St.Antario 09.11.2016 / 14:43

2 respostas

4

Você pode usar:

find "$source" -name "*.zip"

E, se necessário, canalizá-lo para xargs ou use:

shopt -s dotglob
for file in "${source}"/*.zip
do
   if [ -f "${file}" ]; then
      printf '%s\n' "$file"
   fi
done

Para imprimir apenas os arquivos zip que são arquivos regulares ou links simbólicos para arquivos regulares.

    
por 09.11.2016 / 14:55
1

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

(cuidado, omitiria um arquivo chamado .zip (ao contrário das outras soluções dadas aqui)).

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

POSIXly

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' "$@"
    
por 09.11.2016 / 15:37