Se o seu pax
suportar a opção -0
, com zsh
:
print -rN dir/**/*(D/e:'reply=($REPLY/*(ND^/[1,10]))':) |
pax -w0 | xz > file.tar.xz
Inclui os 10 primeiros arquivos que não são de diretório de cada diretório da lista, classificados por nome de arquivo. Você pode escolher uma ordem de classificação diferente, adicionando o qualificador om
glob (ordem por tempo de modificação, Om
para reverter a ordem), oL
(ordem por tamanho), non
(classificar por nome, mas numericamente). ..
Se você não tem o comando padrão pax
, ou ele não suporta -0
, mas você tem o comando GNU tar
, você pode fazer:
print -rN -- dir/**/*(D/e:'reply=($REPLY/*(ND^/[1,10]))':) |
tar --null -T - -cjf file.tar.xz
Se você não pode usar zsh
, mas tem acesso a bash
(o shell do projeto GNU), você poderia fazer:
find dir -type d -exec bash -O nullglob -O dotglob -c '
for dir do
set -- "$dir/*"; n=0
for file do
if [ ! -d "$file" ] || [ -L "$file" ]; then
printf "%sprint -rN dir/**/*(D/e:'reply=($REPLY/*(ND^/[1,10]))':) |
pax -w0 | xz > file.tar.xz
" "$file"
(( n++ < 10 )) || break
fi
done
done' bash {} + | pax -0w | xz > file.tar.xz
Isso seria significativamente menos eficiente.