O seguinte loop de linha de comando copiará o conteúdo (de nível superior) de cada pasta chamada "pasta *" em seu diretório atual em um diretório chamado "new_directory". O /*
glob, por padrão, não corresponderá a "arquivos de ponto"; use shopt -s dotglob
se você quiser mudar esse comportamento. Se o mesmo nome de arquivo (base) já existir em new_directory, ele prefixará o arquivo de destino com a pasta de origem (e um sublinhado), para torná-lo exclusivo.
Tudo em uma linha:
for f in folder*/*; do [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }; [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"; done
Separado por legibilidade:
for f in folder*/*
do
[ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }
[ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"
done
Se você pretende, em vez disso, mover os arquivos de seus locais originais, basta alterar os cp
para mv
.