パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

find & tar -T で失敗

以前やった作業を久々にしようとして、失敗してしまった。以前は、find で特定の文字列がファイル名に付いているファイルを、一気に他の PC へ転送しようとしたものだが、今回は、find の条件を少し変えて、ある日時以前のものを転送しようとしたら、ミスってしまった。

ssh XXX@YYY.ZZZ 'cd ttttt; find -mtime +100 | tar czO -T -' > aaa.tar.gz

みたいな感じでやってしまった。何が問題かというと、find の結果に .(ピリオド)が含まれてしまって、まぁ、大量のファイルが2重に転送されてしまったという状況。もしやるなら、. が含まれないように

ssh XXX@YYY.ZZZ 'cd ttttt; find -mtime +100 -name "A*" | tar czO -T -' > aaa.tar.gz

とか名前を指定したり、-type f で、ディレクトリを含まないようにする必要があった。転送に4〜5時間掛けたが、とりあえずやり直した。

ついでに、転送がどこまで進んでいるのか、何か調べる方法がないか調べてみた。色々やり方は有ると思うが、上記の例で、find の結果を直に tar に食わせるのではなく、一度ファイル(/tmp/tmp.tmp に落として、それを tar に食わせるようにして、

lsof -u NankaUser | awk -F '/' '/home/{buf="\""$6"\""; print "grep -n "buf" /tmp/tmp.tmp"}'|sh

みたいな事をやると、tmp.tmp の何行目のファイルを処理しているかがわかる。もちろん、全部で何行あるかは wc 等で調べておく。NankaUser や home の部分は適宜目的に合わせる。

lsof というなかなかハッカーぽいコマンドがあるのを初めて知った。プロセスがどんなファイルにアクセスしているかが一覧で出るのがなかなか面白い。あるファイルが削除できない時に、誰(プロセス)がそのファイルをロックしているかのチェックも簡単だ。便利便利。流石 Linux