したがって、次のコマンドは/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のように若干異なる動作をする可能性があります)