因此,以下命令从/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)。