「検索」のためのprintf形式またはファイルシステムのファイルを比較するときの違いを制御する方法

「検索」のためのprintf形式またはファイルシステムのファイルを比較するときの違いを制御する方法

自宅で働いている間、ラップトップの内容は大幅に変わります。閉じる前は主にオフィスにあり、ファイルを手動でネットワークドライブにミラーリングできました。

在宅勤務とは、インターネットにアクセスできないことを意味します。次のlistコマンドを使用して、ネットワークドライブの内容をラップトップドライブの内容と比較する必要があります。

touch ~/tmp/2021-07-25.txt -d 2021-07-25

stdbuf -i0 -o0 -e0 \
   find ~/!(tmp) ~/.[^.]* \
   -type f -newer ~/tmp/2021-07-25.txt \
   -printf '%p\t%CY%Cm%Cd.%CH%CM\t%s\n' \
   2>&1 | tee ~/tmp/find.out

"stdbuf"コマンドは、後続のコマンドのバッファリングを無効にして、寿命の兆候を見ることができます。 「find」のファイル/フォルダ引数には、「tmp」を除いて「.」で始まるすべてのファイル/フォルダが含まれますが、現在のフォルダ「.」は含まれていません。親フォルダ「..」ではなく、独自のフォルダです。 printf 句は、次の形式でファイル情報を印刷します。

File path <tab> YYYYMMDD.HHmm <tab> size

YYYY = 4-digit year
MM = 2-digit month
DD = 2-digit day-of-month
HH = 24-hour hour
MM = 2-digit minute

上記はノートパソコン用です。リモートでライブデスクトップにアクセスし、比較のために同様のネットワークドライブのリストを作成できます。ここで検索するファイル/フォルダ引数には、「/i」(ネットワークドライブのアルファベット順ドライブマッピング)のみが含まれます。このトップレベルフォルダには、「.」で始まるファイル/フォルダは含まれていません。 「〜」と「/ i」の違いを避けるために、両方のリストを整理する必要があります。

次のステップは、ラップトップとネットワークドライブとリストを「区別する」ことです。残念ながら、diffはパスの "dirname"部分の共通性のために簡単に削除されます。以下を得るためにfindのprintf形式を修正してみました。

Basename <tab> File path <tab> YYYYMMDD.HHmm <tab> size

残念ながら、diffは最初の数文字に基づいて一致するファイルで簡単に誤解される可能性があります。

私が本当に欲しいのは、diffがファイルパスに基づいて行を一致させ、次にYYYYMMDD.HHmmタグに基づいて、サイズに基づいて後ろの文字を一致させることです。これを行うようにdiffを指示する方法はありますか?

PS:私は両端でCygwinを使用しています。残念ながら、Windows環境では、他の人と共有したり、他の人と共有したりするファイルの名前にスペースが含まれています。一部のフォルダ名には句読点とスペースも含まれています。必要に応じて、ファイルパスの後にタグ(「QQQQ」など)を挿入することで問題を軽減できますが、検索出力のフィールドはすでに<tab>で区切られています。フルファイルパスに基づいて行を一致させるには、「diff」を実行し、ファイルパスフィールドの後に違いがある場合はそれを見つける必要があります。

ベストアンサー1

もちろん、この答えは不完全です。特にテストするWindowsコンピュータがないからです。しかし、最初に在宅勤務を容易にするためにVPNサービスを提供しないことで、IT部門があなたに与える深刻な被害について簡単に言及したいと思います。もちろん、この前例のない時代の彼らのより大きな努力は、不必要なトリックから数え切れないほどの時間を節約します。

あなたの要件をほぼ満たすことができると考えられる唯一のソリューションは、rsyncCygWinで利用可能なソリューションです。家庭用ラップトップとオフィスネットワークドライブの間で動作するSSHリンクを作成すると問題が発生します。幸いなことに、これはdiffある種のWindows互換の一時ファイルシステムよりも簡単な修正方法です。設定が必要な場合があります。オフィスSSH経由でコンピュータを自宅のラップトップに接続します(自宅のルータでTCPポートパススルーを設定します)。これにより、オフィスコンピュータがSSHを介して確実に接続できるように、動的DNSの種類に家庭用ノートパソコンを設定する必要があります。私はオフィスコンピュータがラップトップIP 127.0.1.1のポート22にバインドするためにトンネルされたTCP接続を作成するためにラップトップにSSHで接続すると想像しています。その後、ラップトップから127.0.1.1(オフィスコンピュータ)にrsyncすることは大きな飛躍にならないでください。

簡単に言うと:

  1. 既知のDNS名を介してアクセスできるように、ホームルーターのIPに動的DNSを設定します。

  2. ホームルータにパススルーTCPポート(通常はポート922)を設定します。

  3. SSH VPN設定オフィスコンピュータを起動できますオフィスファイアウォールを介してホームルーターのダイナミックDNS名のポート922への接続を接続し(IT部門は着信SSH接続に対応していないため)、着信接続が既知のAにバインドするようにホームラップトップを構成します。ローカル(ノートブック用)IPの未使用TCPポート。

オフィスコンピュータが自宅のラップトップに接続されると、SSHトンネルは次のことを可能にする機能的なVPNトンネルを提供する必要があります。

  • 自宅のラップトップから127.0.0.1ポート2222(または選択されている未使用ポート)でSSH経由でオフィスコンピュータにログインします。
  • rsync家庭用ラップトップから127.0.0.1ポート2222にファイルをアップロードまたはダウンロードする

もちろん、これは難しい作業であり、多くのステップが必要です。 StackExchangeには、これらの手順を完了する方法を扱うリソースがすでにあるようです。

より良いリンクを見つけることもできますが、始めるには:

投票するddclienthttps://apple.stackexchange.com/questions/75372/how-do-i-configure-dynamic-dns-when-my-router-does-not-support-it

短いSSHトンネル方法:接続されたコンピュータへのリバースSSH接続をどのように設定しますか?

これらのリソースと自分で見つけることができる他のリソースを探索することで、より良いソリューションの一部を集めて、ニーズに合わせて利用可能なツールにマージできると思います。頑張ってください!そして、この一連の作業を完了している間に疑問に思うフォローアップの質問を投稿してください。

おすすめ記事