Você só precisa alterar um caractere no seu comando:
find * -type l -name '*.h' -exec ln -s /sourcedir/{} /destinationdir/{} \;
# ^
Estou tentando usar o find para criar vários links simbólicos, mas usando o resultado com {} includes ./ antes de cada nome de arquivo. Como posso evitar isso?
find . -type l -name '*.h' -exec ln -s /sourcedir/{} /destinationdir/{} \;
Você só precisa alterar um caractere no seu comando:
find * -type l -name '*.h' -exec ln -s /sourcedir/{} /destinationdir/{} \;
# ^
Use a sintaxe padrão, como:
S=/sourcedir D=/destdir find . -type l -name '*.h' -exec sh -c '
for i do
ln -s -- "$S${i#.}" "$D/$i"
done' sh {} +
Se você quiser usar o GNUisms, você poderia fazer:
find . -type l -name '*.h' -printf '/sourcedir/%Pfind "$PWD" -type l -name '*.h' -printf '%pS=/sourcedir D=/destdir find . -type l -name '*.h' -exec sh -c '
for i do
ln -s -- "$S${i#.}" "$D/$i"
done' sh {} +
/destdir/%Pfind . -type l -name '*.h' -printf '/sourcedir/%Pfind "$PWD" -type l -name '*.h' -printf '%p%pre%/destdir/%P%pre%' |
xargs -r0n2 ln -s
/destdir/%P%pre%' |
xargs -r0n2 ln -s
' |
xargs -r0n2 ln -s
/destdir/%P%pre%' |
xargs -r0n2 ln -s
Ou se /sourcedir
for o diretório atual:
find
imprimirá nomes relativos aos caminhos que você fornecer como argumentos. Nesse caso, o caminho é .
, então todos os nomes começarão com ./
. Para obter caminhos absolutos, você precisa fornecer um caminho absoluto como entrada:
find "$PWD" -type l -name '*.h'
Esse comando usa a variável de ambiente $PWD
, que contém o caminho absoluto do diretório de trabalho atual, portanto, deve preservar o significado do comando original.
Tags find