%P fornecerá o caminho relativo do arquivo a partir do diretório usado como ponto de partida, de modo que se find for executado com some/path como ponto de partida e encontrar o caminho some/path/to/file , então %P será expandido para to/file .
Quando o GNU find não recebe um ponto de partida (como no comando fornecido na pergunta), ele usará o diretório atual ( . ) como ponto de partida. Por isso, o formato %P removerá ./ dos caminhos encontrados nesse caso.
Para fazer o mesmo que -printf '%P com implementações não-GNU find'-mindepth , assumindo que find ainda está disponível (como em sh -c em sistemas BSD):
find . -mindepth 1 -exec sh -c '
for pathname do
printf "%stopdir=/some/path
find "$topdir" -mindepth 1 -exec sh -c '
topdir=${1%/}; shift
for pathname do
printf "%sfind . -mindepth 1 -exec sh -c '
for pathname do
printf "%stopdir=/some/path
find "$topdir" -mindepth 1 -exec sh -c '
topdir=${1%/}; shift
for pathname do
printf "%s%pre%" "${pathname#$topdir/}"
done' sh "$topdir" {} +
" "${pathname#./}"
done' sh {} +
" "${pathname#$topdir/}"
done' sh "$topdir" {} +
" "${pathname#./}"
done' sh {} +
O script incorporado find obterá um lote de nomes de caminho de ./ para trabalhar e usará uma expansão de parâmetro padrão que removerá o %code% inicial do nome do caminho antes de imprimi-lo com um caractere de finalização.
A mesma coisa, mas com uma variável segurando o caminho do diretório de nível superior single :
%pre%