Tidak terlalu efisien, tetapi Anda bisa melakukannya:
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
Itulah cek bahwa file tersebut tidak terdaftar dengan w
ritus a
modus ccess dalam l
i s
t dari o
pena f
iles sebelum m
o v
ing.
The psmisc
pelaksanaan fuser
sebagai biasanya ditemukan pada sistem operasi berbasis Linux memiliki -w
fungsi (untuk memeriksa file terbuka untuk menulis) tetapi sayangnya hanya bekerja dengan -k
membunuh proses yang sesuai. Namun, tampaknya Anda masih dapat menggunakannya dengan menggunakan sinyal semu 0 yang tidak melakukan apa-apa:
find /folder/downloading -type f -exec sh -c '
for file do
fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded
done' sh {} +
Hapus -s
(atau bahkan ganti dengan -v
) jika Anda ingin melihat proses apa yang mencegah langkah tersebut.
Perhatikan bahwa jika Anda tidak menjalankan perintah itu sebagai pengguna super, Anda hanya akan mendapatkan informasi tentang proses Anda. Jika proses pengunduhan file berjalan sebagai pengguna yang berbeda, mereka akan tetap tidak terdeteksi.
Perhatikan juga bahwa kecuali Anda memindahkan file ke sistem file yang berbeda, memindahkan file tidak akan mencegah proses apa pun yang saat ini menulis ke file tersebut dari penyelesaian penulisan ke dalamnya.
Namun, tergantung dari apa yang telah mereka rancang untuk dilakukan setelahnya, mereka mungkin bingung jika setelah mereka selesai menulis, file tidak lagi ada (misalnya jika mereka ingin mengubah beberapa atribut file setelah mengunduhnya dan melakukannya tidak melalui deskriptor file (seperti chmod()
vs fchmod()
, atau utimes()
yang tidak dapat dilakukan melalui deskriptor file)).
%.part
kemudian ganti nama menjadi%). Kemudian jika pengunduh berperilaku baik (tidak ada yang aneh), maka Anda harus dapat mengganti nama (mv
) file.