Questão relacionada a links simbólicos e cópia

1

Portanto, o seguinte comando copia de /source/allsubdirectroies ( /usr/hdp/2.6.3.0-235 ) para uma pasta /target ( /tmp/jar263 ):

find /usr/hdp/2.6.3.0-235 -type f -name "*.jar" -exec cp {} /tmp/jar263 \;

O problema para mim é que no diretório de origem existem arquivos com link simbólico, por exemplo:     hadoop-nfs.jar - > hadoop-nfs-2.7.3.2.6.3.0-235.jar

Então, quando eu verifico minha pasta /tmp/jar263 , vejo o seguinte arquivo:

hadoop-nfs-2.7.3.2.6.3.0-235.jar

No entanto, o que eu quero é o nome "hadoop-nfs.jar".

Qualquer forma de obter o nome do link e não o nome original do arquivo?

Existem muitos links na estrutura da pasta / subpasta usr/hdp/2.6.3.0-235/ .

    
por user284144 03.04.2018 / 16:31

1 resposta

1

De man find , versão do manpages do ubuntu:

-L Follow symbolic links. When find examines or prints information about files, the information used shall be taken from the properties of the file to which the link points, not from the link itself (unless it is a broken symbolic link or find is unable to examine the file to which the link points). Use of this option implies -noleaf. If you later use the -P option, -noleaf will still be in effect. If -L is in effect and find discovers a symbolic link to a subdirectory during its search, the subdirectory pointed to by the symbolic link will be searched.

When the -L option is in effect, the -type predicate will always match against the type of the file that a symbolic link points to rather than the link itself (unless the symbolic link is broken). Using -L causes the -lname and -ilname predicates always to return false.

Então find -L /usr/hdp/2.6.3.0-235 -type f -name "*.jar" -exec cp {} /tmp/jar263 \; deve fazer o truque. Certifique-se de ler as opções em -type , como sugerido por roaima, se você tiver algum comportamento estranho (a localização pode se comportar de maneira ligeiramente diferente, por exemplo, OSX).

    
por 03.04.2018 / 17:00

Tags