Saya mengunduh banyak file ke folder downloading
melalui HTTPie . Skrip bash bertujuan untuk memproses file yang diunduh, dan saya mencoba menyalin file yang diunduh ke folder lain sebagai
find /folder/downloading -type f -exec mv '{}' /folder/downloaded \;
tetapi ini juga menyalin file, yang belum selesai. Saya mencoba membatasi transfer ke file yang lebih lama dengan menambahkan -mmin +5
perintah. Apa perintah efisien untuk membiarkan file sedang ditulis dan hanya mentransfer file yang diunduh?
%.part
kemudian ganti nama menjadi%). Kemudian jika pengunduh berperilaku baik (tidak ada yang aneh), maka Anda harus dapat mengganti nama (mv
) file.Jawaban:
Tidak terlalu efisien, tetapi Anda bisa melakukannya:
Itulah cek bahwa file tersebut tidak terdaftar dengan
w
ritusa
modus ccess dalaml
is
t dario
penaf
iles sebelumm
ov
ing.The
psmisc
pelaksanaanfuser
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: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()
vsfchmod()
, atauutimes()
yang tidak dapat dilakukan melalui deskriptor file)).sumber
-exec
berjalansh
dengan satu perintah (-c '...'
) dan{} +
memberitahu untuk menempatkan lebih dari satu hasil ke perintah itu sekaligus. Yang tidak saya mengerti adalah mengapa adash
perintah lain setelah ini. Apa yang saya lewatkan?$0
. Artinya, itu memberi nama untuk skrip inline itu. Nama itu dapat digunakan dalam pesan kesalahan seperti<name>: fuser: command not found
misalnya, jadish
umumnya merupakan pilihan yang baik dalam hal ini untuk memperjelas apa yang melaporkan pesan kesalahan itu (itu juga akan menjadi apa jika kita tidak memberikan argumen sama sekali setelah skrip inline).