Anda tampaknya telah mencampuradukkan beberapa hal.
set today = 'date +%Y'
terlihat seperti sintaks tcsh, tetapi bahkan dalam tcsh ia memberikan string date +%Y
ke variabel today
, itu tidak menjalankan date
perintah. Karena Anda mungkin menggunakan bash atau shell POSIX lainnya, sintaks dari suatu tugas adalah today=some_value
(tanpa spasi di sekitar tanda sama dengan). Untuk menjalankan perintah dan menetapkan outputnya ke variabel, gunakan substitusi perintah :
today=$(date +%Y-%m-%d)
(Saya juga telah menyelesaikan spesifikasi tanggal). Anda dapat menggunakan backquotes alih-alih tanda kurung dolar, tetapi cenderung menjadi bingung secara visual dengan forward quotes, dan aturan ketika Anda membutuhkan kutipan di dalam perintah backquoted cukup kompleks dan bergantung pada implementasi, jadi lebih baik tidak berpegang teguh pada $(…)
(yang memiliki efek yang sama dengan sintaksis saner).
Anda menggunakan &
di akhir beberapa perintah. Itu membuat perintah dieksekusi di latar belakang, yang tidak diinginkan di sini. Saya menduga Anda maksud &&
, yang berarti mengeksekusi perintah berikutnya hanya jika perintah pertama berhasil.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Alternatif untuk menggunakan &&
setelah setiap perintah adalah memulai skrip Anda set -e
. Ini memberitahu shell untuk berhenti mengeksekusi skrip segera setelah perintah apa pun mengembalikan status bukan nol (kecuali untuk perintah dalam if
kondisi dan beberapa kasus lainnya).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
find
Perintah Anda baik-baik saja tetapi mungkin tidak melakukan apa yang ingin Anda lakukan (meskipun saya tidak tahu pasti apa itu).
Anda sedang membuat direktori dengan mkdir
dan kemudian segera melewatinya find
. Itu tidak akan berguna kecuali direktori sudah ada. Apakah Anda bermaksud membuat direktori untuk log hari ini dan memindahkan file terbaru dari The_Logs
ke direktori bernama eg The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
Atau Anda bermaksud mengganti nama file log hari ini untuk menambahkan akhiran $today
? Itu membutuhkan penghitungan nama file yang berbeda untuk setiap file untuk bergerak.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Perhatikan bahwa saya menggunakan -mtime
, untuk memindahkan file berdasarkan waktu modifikasi mereka, dan bukan -atime
, yang merupakan waktu file terakhir dibaca (jika sistem Anda melacak itu - jika tidak, atime mungkin sejauh mtime).
:
karena itu akan dibaca sebagai host di rsync dan scp. stackoverflow.com/a/37143274/390066