ファイルが与えられたら、そのファイルがコピーされたサブディレクトリ内の場所を見つけます。

ファイルが与えられたら、そのファイルがコピーされたサブディレクトリ内の場所を見つけます。

私が知っているファイルが特定のディレクトリにコピーされている場合は、そのファイルのコピーが現在ある正確なパスを見つけたいと思います。ファイルは編集されず、コピーとまったく同じように表示されます。

ファイルがどこにあるかに関するいくつかの情報を知っているので、ディレクトリ全体とすべてのサブディレクトリを確認する必要はありません。これらのファイルには、ファイルのコピーが配置できる場所を絞り込むことが知られているRUNとVERSIONという2つの特性があります。

このソリューションは、diffファイルを比較したり、実際に表示したいディレクトリをgrep選択したりするのに効果的です。findしかし、私はそれらをどのように組み合わせるのかわかりません。

したがって、私たちはファイル(MYFILE=data.txt)を持っていてJun-09/15/version3/run1、そのコピーのパス(例えば)を知りたいと思います。たとえば、一部の特定のファイルでは、RUN=run1この場合は「run2」ディレクトリを見てはいけません。同様に、私たちはVERSION=version3この場合、version1またはversion2ディレクトリを見てはいけないことを知っています。ファイルのコピーがない可能性があることは注目に値し、この場合も知りたいです。

ファイル構造の説明:関連ディレクトリには、過去7年間の各月(たとえば「Jun-09」)のフォルダがあり、各サブディレクトリには、現在の月の各日付(たとえば「11」は11日を表します)のフォルダがあります。あります。次に、各「日」フォルダには各「バージョン」(関連データの3つの「バージョン」があります)のフォルダがあり、各フォルダには2つの「実行」があります。ただし、フォルダ内に時間ごとにファイルが整理されていても、ファイルが当月に作成されたか、最後に編集されたという保証はありません。

私の試み:上記の構造のルートで実行しようとしましたが、find . -type f -name data.txt | diff ~/myOtherdirectory/files/data.txt「 '~/myOtherdirectory/files/data.txt'以降にオペランドがありません」というメッセージが表示され続けます。理想的には、私が見ているファイルとそのファイルが存在する可能性がある他のすべてのファイルとの違いを見つけることです。調べるためにディレクトリの範囲を絞り込むことはなく、実際にコピーのパスを取得することもありません。

ベストアンサー1

私はあなたに提案します - あなたのソフトウェアに応じて - fslint、duff、fdupes、dmerge、rmlint、rdfind - それらはすべてfdupesまたはdupseekよりも速く双子を見つけることができるでしょう。

私は次を実行します:

$ find /path -type f -printf "%p - %s\n" | sort -nr -k3 | uniq -D -f1

おすすめ記事