複数のファイルをフォルダにダウンロードし、downloading
複数のファイルをフォルダにダウンロードしました。HTTPie。 bashスクリプトはダウンロードしたファイルを処理するように設計されているので、以下のようにダウンロードしたファイルを別のフォルダにコピーしてみました。
find /folder/downloading -type f -exec mv '{}' /folder/downloaded \;
ただし、これは完了していないファイルもコピーします。-mmin +5
コマンドを追加して古いファイルの転送を制限してみました。ファイルを書き込んだままにしてダウンロードしたファイルのみ転送する有効なコマンドは何ですか?
ベストアンサー1
それほど効率的ではありませんが、次のようにできます。
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
つまり、閉じる前に、ファイルのiにファイルがw
意識アクセスモードでリストされていないことを確認してください。a
l
s
o
f
m
v
通常、Linuxベースのオペレーティングシステムで見つかった実装psmisc
には機能(書き込み用に開いているファイルの確認)がありますが、残念ながらそのプロセスを終了するためにのみ使用できます。しかし、何もしない偽の信号0を使用すると、まだ使用できるようです。fuser
-w
-k
find /folder/downloading -type f -exec sh -c '
for file do
fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded
done' sh {} +
どのプロセスが移動をブロックしているかを確認するには、削除-s
(または置き換え)してください。-v
スーパーユーザーでこれらのコマンドを実行しないと、プロセスに関する情報のみを取得できます。ファイルをダウンロードするプロセスが別のユーザーとして実行されている場合は、検出されません。
また、ファイルを別のファイルシステムに移動しない限り、ファイルを移動しても、現在ファイルに書き込んでいるプロセスが書き込みを完了するのを妨げることはありません。
ただし、後で実行するように設計された操作に応じて書き込みが完了した後にファイルがもう存在しない場合は、混乱する可能性があります(ファイルをダウンロードした後にファイルの一部のプロパティを変更したい場合など)。いいえファイル記述子を介して(たとえば、chmod()
vsfchmod()
またはutimes()
ファイル記述子を介して実行できない)