Saya lebih suka tidak melakukan ini di PHP jadi saya berharap seseorang yang ahli dalam skrip shell dapat membantu.
Saya memerlukan skrip yang berjalan melalui direktori secara rekursif dan menemukan semua file dengan tanggal modifikasi terakhir lebih besar dari tanggal tertentu. Kemudian, itu akan mem-tar dan zip file (s) menyimpan informasi jalur.
Jawaban:
sesederhana:
di mana
find . -mtime -1
akan memilih semua file dalam (secara rekursif) direktori saat ini diubah hari sebelumnya. Anda dapat menggunakan pecahan, misalnya:sumber
-newermt
adalah jauh lebih bagus.-type f
ke file tertentu saja. Ini mempertahankan struktur folder, tetapi hanya mencadangkan file dengan perubahan.Jika Anda memiliki GNU
find
, maka ada banyak sekali opsi yang relevan. Satu-satunya hambatan adalah bahwa antarmuka mereka kurang dari bintang:-mmin n
(waktu modifikasi dalam menit)-mtime n
(waktu modifikasi dalam beberapa hari)-newer file
(waktu modifikasi lebih baru dari waktu modifikasi file)-daystart
(sesuaikan waktu mulai dari waktu sekarang hingga awal hari)Bagian tersulitnya adalah menentukan jumlah menit sejak suatu waktu.
Satu opsi yang patut dipertimbangkan: gunakan
touch
untuk membuat file dengan cap waktu modifikasi yang diperlukan; lalu gunakanfind
dengan-newer
.touch -t 200901031231.43 /tmp/wotsit find . -newer /tmp/wotsit -print rm -f /tmp/wotsit
Ini mencari file yang lebih baru dari 2009-01-03T12: 31: 43. Jelas, dalam sebuah skrip,
/tmp/wotsit
akan ada nama dengan PID atau nilai lain untuk membuatnya unik; dan akan adatrap
untuk memastikan itu dihapus bahkan jika pengguna menyela, dan seterusnya dan sebagainya.sumber
-newermt '2009-01-03T12:31:43'
untuk menghindari kebutuhan membuat file hanya untuk referensi.-newermt
(didokumentasikan di bawah-newerXY
karena ada beberapa opsi; X = m, Y = t dalam kasus ini). GNU yang ditemukan pada sistem Linux (hampir kuno) yang saya gunakan tidak mendukung opsi, jadi ini adalah kedatangan yang relatif baru. Terimakasih atas peringatannya.-newermt '-2 weeks'
.-newermt '2009-01-03T12:31:43'
terlihat luar biasa, tetapi sayangnya tampaknya menafsirkan semuanya di zona waktu yang salah: lists.gnu.org/archive/html/bug-findutils/2012-12/msg00009.htmlAnda dapat melakukan ini secara langsung dengan tar dan bahkan lebih baik:
tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files
Ini menginstruksikan tar untuk mengompres file yang lebih baru dari tanggal 1 Januari 2014, 18:00:00.
sumber
tar
datang hanya dengan dukungan OS X dan FreeBSD--newer
yang merupakan opsi panjang untuk-N
GNUtar
.Ini akan berfungsi untuk beberapa file. Anda ingin menyertakan "-print0" dan "xargs -0" jika ada jalur yang memiliki spasi di dalamnya. Contoh ini mencari file yang diubah dalam 7 hari terakhir. Untuk menemukan yang diubah sebelum 7 hari terakhir, gunakan "+7".
Seperti yang diperingatkan halaman ini , xargs dapat menyebabkan perintah tar dijalankan beberapa kali jika ada banyak argumen, dan tanda "-c" dapat menyebabkan masalah. Dalam hal ini, Anda menginginkan ini:
Anda tidak dapat memperbarui arsip tar yang di-zip dengan tar, jadi Anda harus melakukan bzip2 atau melakukan gzip di langkah kedua.
sumber
-type f
ke file tertentu saja. Ini mempertahankan struktur folder, tetapi hanya mencadangkan file dengan perubahan / ditambahkan baru-baru ini.Ini akan menampilkan semua file yang diubah dalam 7 hari terakhir.
find . -type f -mtime -7 -print
Masukkan itu ke dalam tar / zip, dan Anda akan melakukannya dengan baik.
sumber
Saya hanya akan melakukan hal berikut untuk membuat cadangan semua file baru dari 7 hari yang lalu
tar --newer $(date -d'7 days ago' +"%d-%b") -zcf thisweek.tgz .
perhatikan Anda juga bisa mengganti '7 hari yang lalu' dengan apapun yang sesuai dengan kebutuhan Anda
Dapat :
date -d'yesterday' +"%d-%b"
Atau bahkan :
date -d'first Sunday last month' +"%d-%b"
sumber
baik di bawah linux coba baca halaman manual dari perintah find
sesuatu seperti ini seharusnya
find . -type f -mtime -7 -print -exec cat {} \; | tar cf - | gzip -9
dan Anda memilikinya
sumber
Anda bisa mendapatkan daftar file yang terakhir diubah lebih dari x hari yang lalu dengan:
Kemudian Anda hanya perlu file tar dan zip dalam daftar yang dihasilkan, misalnya:
untuk semua file yang diubah selama sebulan terakhir.
sumber
Skrip ini akan menemukan file yang memiliki tanggal modifikasi dua menit sebelum dan sesudah tanggal yang ditentukan (dan Anda dapat mengubah nilai dalam kondisi sesuai kebutuhan Anda)
PATH_SRC="/home/celvas/Documents/Imp_Task/" PATH_DST="/home/celvas/Downloads/zeeshan/" cd $PATH_SRC TODAY=$(date -d "$(date +%F)" +%s) TODAY_TIME=$(date -d "$(date +%T)" +%s) for f in `ls`; do # echo "File -> $f" MOD_DATE=$(stat -c %y "$f") MOD_DATE=${MOD_DATE% *} # echo MOD_DATE: $MOD_DATE MOD_DATE1=$(date -d "$MOD_DATE" +%s) # echo MOD_DATE: $MOD_DATE DIFF_IN_DATE=$[ $MOD_DATE1 - $TODAY ] DIFF_IN_DATE1=$[ $MOD_DATE1 - $TODAY_TIME ] #echo DIFF: $DIFF_IN_DATE #echo DIFF1: $DIFF_IN_DATE1 if [[ ($DIFF_IN_DATE -ge -120) && ($DIFF_IN_DATE1 -le 120) && (DIFF_IN_DATE1 -ge -120) ]] then echo File lies in Next Hour = $f echo MOD_DATE: $MOD_DATE #mv $PATH_SRC/$f $PATH_DST/$f fi done
Misalnya Anda ingin file memiliki tanggal modifikasi sebelum tanggal tertentu saja, Anda dapat mengubah
120
ke0
dalam$DIFF_IN_DATE
parameter membuang kondisi$DIFF_IN_DATE1
parameter.Demikian pula jika Anda ingin file memiliki tanggal modifikasi 1 jam sebelum dan setelah tanggal tertentu, ganti saja
120
dengan3600
inif CONDITION
.sumber