Iterando os subdiretórios de um diretório:
for subdir in root_folder/*/; do
if [ -L "${subdir%/}" ]; then continue; fi
…
done
A linha if [ -L …
ignora links simbólicos para diretórios. Omitir, se você quiser incluir links simbólicos para diretórios ou se você sabe que não haverá nenhum.
Os diretórios cujo nome começa com .
(diretórios de pontos) não serão incluídos. Para incluí-los, no bash, execute shopt -s dotglob
.
Para contar o número de arquivos em um diretório, no bash, armazene-os em uma matriz e conte o número de elementos. Execute shopt -s nullglob
para obter 0 para um diretório vazio (caso contrário, o padrão de glob *
permanecerá não expandido se não corresponder a nada, portanto você obterá 1 em vez de 0).
Assim:
#!/bin/bash
shopt -s nullglob dotglob
for subdir in root_folder/*/; do
if [ -L "${subdir%/}" ]; then continue; fi
files=("$subdir"/*)
if ((${#files[@]} >= 5)); then
cp -Rp "$subdir" new_folder/
fi
done