Saya perlu memindahkan file berdasarkan satu tahun. Saya menggunakan find
perintah
find /media/WD/backup/osool/olddata/ -mtime +470 -exec ls -lrth {} \;|sort -k6
tetapi agar perintah ini berhasil dieksekusi, saya perlu tahu persis mtime
sekarang 470 hanyalah sebuah tebakan. Berarti jika saya dapat memberikan tahun 2012 itu memberi saya file yang hanya terkait dengan 2012.
Jadi saya butuh saran tentang cara
Temukan file berdasarkan tahun mis. 2012 dan pindahkan ke direktori lain.
OS release 5.2
FIND version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX
-exec ls ... \;
bukan-exec ... +
? Apakah temuan Anda terlalu tua untuk itu? Dalam hal inifind ... -print0 | xargs -0 ls...
akan jauh lebih cepat.Jawaban:
Anda ingin menggunakan
-newermt
opsi untukfind
:untuk mendapatkan semua file dengan waktu modifikasi pada tahun 2012.
Jika temuan Anda tidak mendukung,
-newermt
Anda juga dapat melakukan hal berikut untuk mencegah penggunaan perhitungan offset:sumber
find
(Saya telah menemukan versi 4.4.2)-exec ls
tidak masuk akal.sumber
-exec ls -l
lebih masuk akal, dan bahkan lebih saat pengujian.find
dapat mencetak semua yangls
bisa. OK, dengan satu pengecualian: melarikan diri / mengutip karakter yang tidak menyenangkan. Namun secara umum output darifind
dapat diurutkan secara langsung. Panggilan tak berguna dari ls tidak membuat semuanya lebih cepat.-print
atau mungkin-ls
) saat pengujian. Keuntungan menggunakan-exec ls {}
adalah bahwa ia sudah mengeksekusi sesuatu yang eksternal untuk ditemukan . Jadi pada saat Anda beralih darils
kemv
, perubahan yang sebenarnya minimal.Menurut halaman manual, argumen untuk -mtime adalah jumlah hari yang Anda cari. Anda dapat menggunakan
date +%j
untuk menemukan jumlah hari sejak 1 Januari tahun berjalan.sumber
-daystart
opsi ini jika ingin bekerja-mtime
. Kalau tidak, Anda akan memiliki masalah dengan file di sekitar awal dan akhir tahun dengan cara apa pun yang Anda lakukan kecuali Anda menjalankannya tepat di tengah malam. Anda dapat melakukan offset dengan lebih akurat-mmin
dibandingkan dengan-mtime
jika Anda dapat menemukan jumlah menit sejak tahun baru dengan mudah. Tetapi ada masalah yang sama dengan itu-mtime
, hanya untuk file yang lebih sedikit (satu menit sekitar tengah malam tahun baru).find -mtime $("date -+%j")
mungkin tidak akan memberikan OP apa yang mereka inginkan. Saya meninggalkannya untuk anak cucu meskipun karena ini sepertinya blindspot bagi orang untuk jatuh ke dalam.Anda dapat mencoba menggunakan kombinasi dengan perintah
stat
dan / ataudate
seperti pada baris satu berikut:BSD / Mac OS X:
Linux:
Dalam kedua kasus pendekatannya adalah dengan menggunakan
date
perintah untuk mengekstrak tahun dari waktu modifikasi terakhir dari setiap file dan kemudian untuk membangun jalur dengan tahun ini. Perintahmkdir -p
akan membuat jalur ini jika belum ada. Tentu saja Anda dapat menggunakan beberapafind
opsi lain untuk mempersempit pencarian Anda.sumber
Jika Anda melakukan ini dari direktori kerja, Anda dapat melakukan ini sebagai gantinya:
Ini menyederhanakan banyak hal dan tidak menyebabkan tumpang tindih. Tetapi juga mengasumsikan bahwa file-file ini lebih tua dari 6 bulan, dan itu
ls
akan mencetak tahun bukan waktu yang tepat.Untuk file yang lebih baru dari 6 bulan, Anda hanya perlu menggantinya dengan ini:
atau yang serupa, tergantung pada bulan. Jika Anda ingin membuat daftar bulan untuk memindahkan file (atau jika Anda ingin membuat daftar selama bertahun-tahun) lakukan ini:
sumber