%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%