Saya menggunakan perintah berikut untuk menghapus direktori, file dan direktori yang berumur lebih dari 30 hari, dan memindahkannya ke direktori arsip yang dapat saya hapus setelah beberapa minggu jika tidak ada yang meminta file mereka kembali. Direktori target memiliki subdirektori berdasarkan nama pengguna, demikian juga direktori arsip.
Ini adalah perintah yang saya gunakan:
find /path/to/directory/username/ -mtime +30 -exec mv "{}" /path/to/archive/username/ \;
Saya menyarankan versi modifikasi ini untuk menjawab pertanyaan pada ask ubuntu, pengguna lain mengedit kode untuk mengubah akhir baris \;
karena +
lebih cepat (dan lebih benar?). Lihat disini
Namun, menggunakan +
cara ini berfungsi jika -exec
perintahnya adalah ls -lh
tetapi tidak dalam perintah sebenarnya yang saya gunakan. Jika saya mencobanya dengan +
saya mendapatkan pesan kesalahan:
find: missing argument to '-exec'
Saya tidak mengerti mengapa ini berperilaku seperti ini, atau apa perintah yang benar. Tolong jangan hanya mengirim koreksi perintah, saya ingin mengerti daripada hanya mengikuti saran secara membabi buta.
sumber
+
memasok beberapa argumen ke perintah yang sama, tetapimv
tidak bisa mengatasinya!Jawaban:
Pengguna di pos itu mungkin mengatakan bahwa
+
tanda di akhir-exec
perintah lebih cepat, tetapi tidak mengapa.Mari kita asumsikan
find
perintah mengembalikan file berikut:-exec
Perintah normal (-exec command {} \;
) berjalan sekali untuk setiap file yang cocok. Sebagai contoh:Laksanakan:
Jika Anda menggunakan
+
tanda (-exec command {} +
) perintah dibangun dengan menambahkan beberapa file yang cocok di akhir perintah. Sebagai contoh:Laksanakan:
Untuk menggunakan
+
flag dengan benar, argumen untuk memproses harus di akhir perintah, bukan di tengah. Itu sebabnyafind
memberimissing argument to '-exec'
contoh pada Anda; itu merindukan penutupan{}
.sumber
find -exec
mengharuskan{}
untuk menjadi arg terakhir, ketika digunakan bersama+
. Adakah yang tahu mengapa keputusan desain itu dibuat, alih-alih membiarkan konstruksi seperti pekerjaan baris perintah OP?Pengguna menjelaskan hasil edit mereka ....
... menggunakan tautan ini . Saya pikir pada dasarnya alih-alih menggunakan beberapa perintah, ia mengirim semua nama file ke satu contoh perintah, untuk mempercepat. Ini adalah contoh dari sini :
Ada bentuk lain yang tersedia menggunakan
;
dan+
juga (dari sini :)Karena itu, contoh sintaks berikut diizinkan untuk menemukan perintah:
NAMUN, saya tidak yakin ini akan bekerja dengan perintah pindah, karena itu sintaksnya
mv [OPTION]... SOURCE DEST
, kecuali-t
opsi atau serupa digunakan. Namun itu harus bekerjals
tanpa opsi tambahan dll karena mereka dapat mengerti ketika beberapa nama file diberikan. The+
juga mungkin perlu melarikan diri (yaitu\+
)sumber
mv -t
, keduanya +1!