与符号链接和复制相关的问题

与符号链接和复制相关的问题

因此,以下命令从/source/allsubdirectroies( /usr/hdp/2.6.3.0-235) 复制到/target( /tmp/jar263) 文件夹:

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

对我来说,问题是在源目录中有带有符号链接的文件,即:hadoop-nfs.jar -> hadoop-nfs-2.7.3.2.6.3.0-235.jar

因此,当我检查/tmp/jar263文件夹时,我看到以下文件:

hadoop-nfs-2.7.3.2.6.3.0-235.jar

然而我想要的是“hadoop-nfs.jar”名称。

有什么方法可以获取链接名称而不是文件的原始名称?

usr/hdp/2.6.3.0-235/文件夹/子文件夹结构中有许多链接。

答案1

来自man find,ubuntu 联机帮助页版本:

-L 遵循符号链接。当 find 检查或打印有关文件的信息时,所使用的信息应取自链接指向的文件的属性,而不是取自链接本身(除非它是损坏的符号链接或 find 无法检查其指向的文件)链接点)。使用此选项意味着 -noleaf。如果您稍后使用 -P 选项,-noleaf 仍然有效。如果 -L 有效并且 find 在搜索过程中发现到子目录的符号链接,则将搜索该符号链接指向的子目录。

当 -L 选项有效时, -type 谓词将始终与符号链接指向的文件类型而不是链接本身匹配(除非符号链接已损坏)。使用 -L 会导致 -lname 和 -ilname 谓词始终返回 false。

所以find -L /usr/hdp/2.6.3.0-235 -type f -name "*.jar" -exec cp {} /tmp/jar263 \;应该这样做。请务必阅读下面的选项-类型,正如 roaima 所建议的,如果您遇到任何奇怪的行为(find 的行为可能略有不同,例如 OSX)。

相关内容